﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;

using Sinacor.Infra.Service.Data;
//using Sinacor.Servicos.Comum.Util.SGBD;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Authorization;
using Sinacor.Infra.Service.Common;
namespace Sinacor.Servico.Bovespa.Ordens.ResourceAccess
{
    public class Negocio : BaseResourceAccess
    {
        public Negocio()
            : base(AuthorizationContext.Current.CompanyId) 
        {
        
        }
        /// <summary>
        /// Metodo responsavel por consultar uma lista de negocios para casar
        /// Historico:
        /// Data:	28/11/2007
        /// Autor:	Ludmilla Modesto
        /// Observacao: Alterado os parametros do metodo do RA
        /// </summary>
        /// <summary>
        /// Historico:
        /// Data:	06/12/2007
        /// Autor:	Ludmilla Modesto
        /// Observacao: Alterado a ordem dos parametros
        /// </summary>
        /// <param name="negocio"></param>
        /// <returns></returns>
        /// <summary>
        /// Historico:
        /// Data:	12/12/2007
        /// Autor:	Ludmilla Modesto
        /// Observacao: Atualizada a passagem de parametros utilizando Util
        /// 
        /// Data: 27/12/2007
        /// Autor: Diogo Milanez
        /// Obs: Parametro tipoOrdem foi alterado de Int32 para TipoOrdem
        /// 
        /// Data: 28/12/2007
        /// Autor:
        /// </summary>
        public List<BusinessEntity.Negocio> ConsultarNegocioParaCasar(
            BusinessEntity.Negocio request, Decimal? precoLimite, bool isOrdemLimitada,
            Boolean existeCasamento)
        {
            string temp;
            List<BusinessEntity.Negocio> response = new List<BusinessEntity.Negocio>();
            
            OracleDataBase dbNegocio = this.DataBase;
            BusinessEntity.Negocio beNegocio;

            #region Comando Sql
            StringBuilder sqlComando = new StringBuilder("select ");
            sqlComando.AppendLine("A.NR_NEGOCIO, ");
            sqlComando.AppendLine("A.DV_NEGOCIO, ");
            sqlComando.AppendLine("A.TP_MERCADO, ");
            sqlComando.AppendLine("A.CD_NEGOCIO, ");
            sqlComando.AppendLine("A.QT_NEGOCIO - NVL(A.QT_CASADA,0), ");
            sqlComando.AppendLine("A.VL_NEGOCIO, ");
            sqlComando.AppendLine("A.DT_PREGAO,  ");
            sqlComando.AppendLine("A.CD_NATOPE, ");
            sqlComando.AppendLine("A.QT_NEGOCIO,");
            sqlComando.AppendLine("A.CD_BOLSAMOV, ");
            sqlComando.AppendLine("decode(a.qt_casada,0,'T',null), ");
            sqlComando.AppendLine("a.cd_contraparte, ");
            //20080425 16:41 - RValadao
            //Alterado pois estava gerando erro retornando alguns como Null
            sqlComando.AppendLine("a.tp_liquid,");
            //sqlComando.AppendLine("decode( a.tp_liquid, ");
            //sqlComando.AppendLine("'BOX', 'BOX', ");
            //sqlComando.AppendLine("'DBX', 'DBX', ");
            //sqlComando.AppendLine("'POP', 'POP', ");
            //sqlComando.AppendLine("null), ");
            sqlComando.AppendLine("a.qt_casada, ");
            sqlComando.AppendLine("nvl( b.cd_login, 'Não Identif.' ) ");
            sqlComando.AppendLine("from TORNEGD A, ");
            sqlComando.AppendLine("v_toropera b ");
            sqlComando.AppendLine("where A.DT_PREGAO = :dt_Pregao ");
            sqlComando.AppendLine("AND A.CD_CODCAS = :cd_Codcas ");
            sqlComando.AppendLine("AND A.CD_NATOPE = :cd_Natope ");
            sqlComando.AppendLine("AND A.CD_BOLSAMOV = :cd_Bolsamov ");
            sqlComando.AppendLine("AND b.cd_opera_mega(+) = a.cd_opera_mega ");
            sqlComando.AppendLine("AND (A.TP_MERCADO  = :tp_Mercado ");
            sqlComando.AppendLine("OR DECODE( A.TP_MERCADO, ");
            sqlComando.AppendLine("'FRA', 'VIS', ");
            sqlComando.AppendLine("A.TP_MERCADO ) = :tp_Mercado ) ");
            sqlComando.AppendLine("AND A.QT_NEGOCIO > A.QT_CASADA ");

            #endregion

            if (existeCasamento)
            {
                sqlComando.AppendLine("and a.tp_liquid = 'POP'");
            }

            if (isOrdemLimitada) //(Convert.ToString(request.Ordem.TipoOrdem).Contains("5")))
            {
                if (request.Ordem.NaturezaOperacao == BusinessEntity.Enum.TipoNaturezaOperacao.Compra)
                    sqlComando.AppendLine("AND ( A.VL_NEGOCIO <= :precoLimite or a.tp_mercado = 'TER' ) ");
                else
                    sqlComando.AppendLine("AND (A.VL_NEGOCIO >= :precoLimite or a.tp_mercado = 'TER' ) ");

            }

            DbCommand dbCommand = dbNegocio.GetSqlStringCommand(sqlComando.ToString());

            #region ValoresParametros
            this.DataBase.AddInParameter(dbCommand, "dt_Pregao", DbType.DateTime, request.DataPregao.Value);
            this.DataBase.AddInParameter(dbCommand, "cd_Codcas", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Ordem.CodigoCasamento));
            this.DataBase.AddInParameter(dbCommand, "cd_Natope", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoNaturezaOperacao?>(request.Ordem.NaturezaOperacao)));
            this.DataBase.AddInParameter(dbCommand, "cd_Bolsamov", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Ordem.Bolsa));
            this.DataBase.AddInParameter(dbCommand, "tp_Mercado", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoMercado?>(request.Ordem.TipoMercado)));

            if (isOrdemLimitada) //(Convert.ToString(request.Ordem.TipoOrdem).Contains("5")))
                this.DataBase.AddInParameter(dbCommand, "precoLimite", DbType.Decimal, precoLimite);

            #endregion

            IDataReader reader = dbNegocio.ExecuteReader(dbCommand);

            #region Popular
            while (reader.Read())
            {
                beNegocio = new BusinessEntity.Negocio();

                //Numero do negocio
                beNegocio.NumeroNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.NumeroNegocio));

                //dv negocio  
                beNegocio.DigitoNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.DigitoVerificador));

                //Tipo de Mercado                
                beNegocio.TipoMercado = (BusinessEntity.Enum.TipoMercado?)Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoMercado>(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Mercado).ToString()); 
                


                //Código 
                beNegocio.Titulo = new Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Titulo();

                beNegocio.Titulo.Codigo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Titulo));

                //Quantidade = quantidade negocio - quantidade casada
                beNegocio.Saldo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Saldo));

                //20080410 09:22 - RValadao.7comm - Alterado de BDValorrInt32 para BDValorDecimal
                //valor negocio
                beNegocio.Preco = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Preco));

                //data pregao 
                beNegocio.DataPregao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.DataPregao));

                temp = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.TipoNaturezaOperacao));
                beNegocio.TipoNaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao?)Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoNaturezaOperacao>(temp);

                

                beNegocio.Quantidade = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Quantidade));

                //bolsa
                beNegocio.Bolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Bolsa));

                //Tipo Casamento (10)
                temp = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.TipoCasamento));

                beNegocio.TipoCasamento = (BusinessEntity.Enum.TipoCasamento)Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoCasamento>(temp); 

                

                //Contraparte
                beNegocio.ContraParte = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.ContraParte));

                //20080419 13:08 - Alterado para atender o chamado 3326- DMilanez.7Comm
                temp = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.TipoEstrategia));

                //20080424 16:58 - Alterado pois, segundo analista sinacor, pois nulo do ponto de vista do negocio nao e um valor valido para o campo - DMilanez.7Comm
                if (temp == "NOV" || temp == "NOC")// || string.IsNullOrEmpty(temp))
                    temp = "NOR";
                
                beNegocio.TipoEstrategia = (BusinessEntity.Enum.TipoEstrategia?)Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoEstrategia>(temp);
                
                //Quantidade Casada (12)
                beNegocio.QuantidadeCasada = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.QuantidadeCasada));

                //Login
                beNegocio.LoginOperador = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(BusinessEntity.Negocio.ConsultarNegocioParaCasar.Operador));

                //20080422 18:21 - RValadao
                //Retorna a situação do negócio
                if (beNegocio.QuantidadeCasada != beNegocio.Quantidade && beNegocio.QuantidadeCasada != 0)
                    beNegocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.CasadasParte;
                else if (beNegocio.QuantidadeCasada == 0)
                    beNegocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.NaoCasadas;
                else if (beNegocio.QuantidadeCasada == beNegocio.Quantidade)
                    beNegocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.Casadas;

                response.Add(beNegocio);

            }
            #endregion

            reader.Close();

            return response;
        }

        /// Data:03/02/2008 15:04
        /// Autor:CPimentel
        /// Obs: ALTERADO POR COMPLETO PARA FAZER O FILTRO FUNCIONAR
        public List<BusinessEntity.Negocio> ConsultarNegocios(BusinessEntity.Negocio request)
        {
            List<BusinessEntity.Negocio> response = new List<BusinessEntity.Negocio>();

            #region Instrução sql
            StringBuilder sql = new StringBuilder("SELECT ");
            sql.Append("TORNEGD.DT_MOVIMENTO, ");
            sql.Append("TORNEGD.NR_NEGOCIO, ");
            sql.Append("TORNEGD.HH_NEGOCIO, ");
            sql.Append("TORNEGD.TP_MERCADO, ");
            sql.Append("TORNEGD.CD_NEGOCIO, ");
            sql.Append("TORNEGD.CD_BOLSAMOV, ");
            sql.Append("TORNEGD.QT_NEGOCIO - NVL(TORNEGD.QT_CASADA,0) AS QT_SALDO, ");
            sql.Append("TORNEGD.VL_NEGOCIO, ");
            sql.Append("TORNEGD.DT_PREGAO, ");
            sql.Append("TORNEGD.CD_NATOPE, ");
            sql.Append("TORNEGD.QT_NEGOCIO, ");
            sql.Append("TORNEGD.QT_CASADA, ");
            sql.Append("TORNEGD.CD_CONTRAPARTE, ");
            sql.Append("TORNEGD.TP_LIQUID, ");
            sql.Append("NVL(TORNEGD.CD_CLIENTE,0) AS CD_CLIENTE, ");
            sql.Append("TGEUSUARIO.NM_USUARIO, ");
            sql.Append("TORNEGD.DV_NEGOCIO, ");
            sql.Append("TORNEGD.CD_ESPECIF, ");
            sql.Append("TORNEGD.NM_NOMRES, ");
            sql.Append("TORNEGD.TP_TERMO, ");
            sql.Append("TORNEGD.TP_ORIGEM, ");
            sql.Append("TORNEGD.CD_CONTRAPARTE, ");
            sql.Append("TORNEGD.DS_OBS, ");
            sql.Append("TORNEGD.FT_VALORIZACAO, ");
            sql.Append("TORNEGD.DT_OPCOES, ");
            sql.Append("TORNEGD.TP_GERAOFERTA, ");
            sql.Append("TORNEGD.IN_ORINEG, ");
            sql.Append("TORNEGD.TP_VCOTER, ");
            sql.Append("TORNEGD.PC_COMISSAO_CORRESP, ");
            sql.Append("TORNEGD.CD_TITOBJ, ");
            sql.Append("TORNEGD.CD_CODISI, ");
            sql.Append("TORNEGD.CD_CODCAS, ");
            sql.Append("TORNEGD.IN_AFTERM, ");
            sql.Append("TORNEGD.FT_LIQNOT, ");
            sql.Append("TORNEGD.ID_TPLIQ, ");
            sql.Append("TORNEGD.ID_LIQUID, ");
            sql.Append("TORNEGD.CD_CORRESP ");
            sql.Append("FROM TORNEGD, ");
            sql.Append("TOROPERA, ");
            sql.Append("TGEUSUARIO ");
            sql.Append("WHERE TORNEGD.CD_OPERA_MEGA = TOROPERA.CD_OPERA_MEGA(+) ");
            sql.Append("AND TOROPERA.CD_OPERADOR  = TGEUSUARIO.CD_USUARIO(+) ");
            #endregion

            #region Instrução sql - comentada
            /*StringBuilder sql = new StringBuilder();

            sql.AppendLine(@"
						SELECT
							TORNEGD.DT_MOVIMENTO,
							TORNEGD.NR_NEGOCIO,
							TORNEGD.HH_NEGOCIO,
							TORNEGD.TP_MERCADO,
							TORNEGD.CD_NEGOCIO,
							TORNEGD.CD_BOLSAMOV,
							TORNEGD.QT_NEGOCIO - NVL(TORNEGD.QT_CASADA,0) AS QT_SALDO,
							TORNEGD.VL_NEGOCIO,
							TORNEGD.DT_PREGAO,
							TORNEGD.CD_NATOPE,
							TORNEGD.QT_NEGOCIO,
							TORNEGD.QT_CASADA,
							TORNEGD.CD_CONTRAPARTE,
							TORNEGD.TP_LIQUID,
							TORNEGD.CD_CORRESP,
							TORNEGD.ID_LIQUID,
							NVL(TORNEGD.CD_CLIENTE,0) AS CD_CLIENTE,
							TGEUSUARIO.NM_USUARIO,
							TORNEGD.DV_NEGOCIO,
							TORNEGD.CD_ESPECIF,
							TORNEGD.NM_NOMRES,
							TORNEGD.TP_TERMO,
							TORNEGD.TP_ORIGEM,
							TORNEGD.CD_CONTRAPARTE,
							TORNEGD.DS_OBS,
							TORNEGD.FT_VALORIZACAO,
							TORNEGD.DT_OPCOES,
							TORNEGD.TP_GERAOFERTA,
							TORNEGD.IN_ORINEG,
							TORNEGD.TP_VCOTER,
							TORNEGD.PC_COMISSAO_CORRESP,
							TORNEGD.CD_TITOBJ,
							TORNEGD.CD_CODISI,
							TORNEGD.CD_CODCAS,
							TORNEGD.IN_AFTERM,
							TORNEGD.FT_LIQNOT,
							TORNEGD.ID_TPLIQ
						FROM
							TORNEGD,
							TOROPERA,
							TGEUSUARIO
						WHERE
							TORNEGD.CD_OPERA_MEGA = TOROPERA.CD_OPERA_MEGA (+)
							AND TOROPERA.CD_OPERADOR  = TGEUSUARIO.CD_USUARIO (+) 
			");
            */
            #endregion

            #region Filtros

            if (!String.IsNullOrEmpty(request.Bolsa))
            {
                sql.Append("AND TORNEGD.CD_BOLSAMOV = :CD_BOLSAMOV "); //:Codigo_da_bolsa_solicitada                
            }
            if (request.HoraNegocio.HasValue)// && request.HoraNegocio.Value != DateTime.MinValue)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.HH_NEGOCIO = :HH_NEGOCIO "); //:Codigo_da_bolsa_solicitada                
                 //18/02/2008 - alterado - diogo milanez
            }
            if (request.TipoNaturezaOperacao.HasValue)
            {
                sql.Append("AND TORNEGD.CD_NATOPE = :CD_NATOPE ");
                
            }
            if (request.NumeroNegocio.HasValue)// && request.NumeroNegocio.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.NR_NEGOCIO = :NR_NEGOCIO ");
                
            }
            if (request.DigitoNegocio.HasValue)// && request.DigitoNegocio.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.DV_NEGOCIO = :DV_NEGOCIO ");
                
            }
            if (request.ContraParte.HasValue)// && request.ContraParte.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.CD_CONTRAPARTE = :CD_CONTRAPARTE ");
                
            }
            if (request.TipoMercado.HasValue)
            {
                sql.Append("AND TORNEGD.TP_MERCADO = :TP_MERCADO ");
                
            }
            if (request.TipoTermo.HasValue)
            {
                sql.Append("AND TORNEGD.TP_TERMO = :TP_TERMO ");
                
            }
            if (!String.IsNullOrEmpty(request.Titulo.Codigo))
            {
                sql.Append("AND TORNEGD.CD_NEGOCIO = :CD_NEGOCIO ");
                
            }
            if (request.Titulo.FatorCotacao.HasValue)// && request.Titulo.FatorCotacao != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.FT_VALORIZACAO = :FT_VALORIZACAO ");
                //20080412 11:58 - Alterado - DMilanez.7Comm
            }
            if (!String.IsNullOrEmpty(request.Titulo.Especificacao))
            {
                sql.Append("AND TORNEGD.CD_ESPECIF = :CD_ESPECIF ");
            }
            if (!String.IsNullOrEmpty(request.Titulo.Descricao))
            {
                sql.Append("AND TORNEGD.NM_NOMRES = :NM_NOMRES ");
                
            }
            if (request.DiasLiquidacao.HasValue)// && request.DiasLiquidacao > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.ID_LIQUID = :ID_LIQUID ");
            }
            if (request.PrazoTermo.HasValue)// && request.PrazoTermo > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.TP_VCOTER = :TP_VCOTER ");
            }
            if (request.VencimentoOpcoesTermo.HasValue)// && request.VencimentoOpcoesTermo.Value != DateTime.MinValue)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.DT_OPCOES = :DT_OPCOES ");
            }
            if (!String.IsNullOrEmpty(request.TituloObjeto))
            {
                sql.Append("AND TORNEGD.CD_TITOBJ = :CD_TITOBJ ");
                
            }
            if (request.Quantidade.HasValue)// && request.Quantidade.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.QT_NEGOCIO = :QT_NEGOCIO ");
            }
            if (request.Preco.HasValue)// && request.Preco != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.VL_NEGOCIO = :VL_NEGOCIO ");
            }
            //20080401 15:50 - Alterado de forma a considerar como filtro apenas se for true  - DMilanez.7Comm
            if (request.PontaGeradoraOferta)
            {
                sql.Append("AND TORNEGD.TP_GERAOFERTA = :TP_GERAOFERTA ");                
            }
            //20080401 15:50 - Alterado de forma a considerar como filtro apenas se for true  - DMilanez.7Comm
            if (request.NaoLiquidaNota)
            {
                sql.Append("AND TORNEGD.FT_LIQNOT = :FT_LIQNOT ");
                //0 ao invéz de 1 devido a semantica do campo
            }
            //20080401 15:51 - Alterado de forma a considerar como filtro apenas se for true - DMilanez.7Comm
            if (request.NegociadoAfterMarket)
            {
                sql.Append("AND TORNEGD.IN_AFTERM = :IN_AFTERM ");
            }
            if (!String.IsNullOrEmpty(request.Observacao))
            {
                sql.Append("AND TORNEGD.DS_OBS = :DS_OBS ");
            }
            if (request.Correspondente != null)
            {
                if (request.Correspondente.Codigo.HasValue)// && request.Correspondente.Codigo != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
                {
                    sql.Append("AND TORNEGD.CD_CORRESP = :CD_CORRESP ");
                }
                if (request.Correspondente.PercentualComissao.HasValue)// && request.Correspondente.PercentualComissao != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
                {
                    sql.Append("AND TORNEGD.PC_COMISSAO_CORRESP = :PC_COMISSAO_CORRESP ");
                }
            }
            if (request.TipoEstrategia.HasValue)
            {
                //20080419 12:58 - Alterado para atender ao chamado 0003326 - DMilanez.7Comm
                if (request.TipoEstrategia == BusinessEntity.Enum.TipoEstrategia.Nenhuma)
                {
                    //20080424 16:58 - Alterado pois, segundo analista sinacor, pois nulo do ponto de vista do negocio nao e um valor valido para o campo - DMilanez.7Comm
                    sql.Append("AND ( TORNEGD.TP_LIQUID in ('NOR','NOC','NOV')) ");// OR TORNEGD.TP_LIQUID IS NULL ) ");
                }
                else
                {
                    sql.Append("AND TORNEGD.TP_LIQUID = :TP_LIQUID ");
                }
            }
            if (request.TipoOfertaBovespaFix.HasValue)
            {
                sql.Append("AND TORNEGD.TP_LIQUID = :TP_LIQUID ");
            }
            switch (request.TipoSituacaoCasamentoOrdem)
            {
                case BusinessEntity.Enum.TipoSituacaoCasamento.CasadasParte:
                    sql.Append("AND TORNEGD.QT_NEGOCIO <> TORNEGD.QT_CASADA ");
                    sql.Append("AND TORNEGD.QT_CASADA  <> 0 ");
                    break;
                case BusinessEntity.Enum.TipoSituacaoCasamento.NaoCasadas:
                    sql.Append("AND TORNEGD.QT_CASADA = 0 ");
                    break;
                case BusinessEntity.Enum.TipoSituacaoCasamento.Casadas:
                    sql.Append("AND TORNEGD.QT_CASADA = TORNEGD.QT_NEGOCIO ");
                    break;
                case BusinessEntity.Enum.TipoSituacaoCasamento.ExecutadasSemClientes:
                    break;
                case BusinessEntity.Enum.TipoSituacaoCasamento.Todas:
                    break;
            }
            //20080419 15:44 - Alterado - DMilanez.7Comm
            if (request.DataPregao.HasValue)
            {
                sql.Append("AND TORNEGD.DT_PREGAO = :Data_Pregao ");                
            }
            //20080424 16:33 - Alterado para atender ao chamado- DMilanez.7Comm
            if (request.TipoLiquidacaoNegocio.HasValue)// && request.DiasLiquidacao > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                sql.Append("AND TORNEGD.ID_TPLIQ = :ID_TPLIQ ");
            }
            //Ptruiz.gp - 2008.12.12 -  Alterado para atender ao bug 4705
            if (request.TipoOrigem.HasValue)
            {
                sql.Append("AND TORNEGD.TP_ORIGEM = :TP_ORIGEM ");
            }
            #endregion

            sql.Append("ORDER BY TORNEGD.DT_PREGAO, TORNEGD.NR_NEGOCIO");

            DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql.ToString());

            #region criar parametros
            if (!String.IsNullOrEmpty(request.Bolsa))
            {
                 //:Codigo_da_bolsa_solicitada                
                this.DataBase.AddInParameter(dbCommand, "CD_BOLSAMOV", DbType.AnsiString, request.Bolsa.ToUpper());
            }

            if (request.HoraNegocio.HasValue)// && request.HoraNegocio.Value != DateTime.MinValue)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                 //:Codigo_da_bolsa_solicitada                
                this.DataBase.AddInParameter(dbCommand, "HH_NEGOCIO", DbType.AnsiString, request.HoraNegocio.Value.ToString("HH:mm")); //18/02/2008 - alterado - diogo milanez
            }

            if (request.TipoNaturezaOperacao.HasValue)
            {                
                this.DataBase.AddInParameter(dbCommand, "CD_NATOPE", DbType.AnsiString, EnumConverter.ToString<BusinessEntity.Enum.TipoNaturezaOperacao>(request.TipoNaturezaOperacao.Value));
            }

            if (request.NumeroNegocio.HasValue)// && request.NumeroNegocio.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "NR_NEGOCIO", DbType.Int32, request.NumeroNegocio.Value);
            }

            if (request.DigitoNegocio.HasValue)// && request.DigitoNegocio.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "DV_NEGOCIO", DbType.Int32, request.DigitoNegocio.Value);
            }

            if (request.ContraParte.HasValue)// && request.ContraParte.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "CD_CONTRAPARTE", DbType.Int32, request.ContraParte.Value);
            }
            if (request.TipoMercado.HasValue)
            {                
                this.DataBase.AddInParameter(dbCommand, "TP_MERCADO", DbType.AnsiString, EnumConverter.ToString<BusinessEntity.Enum.TipoMercado>(request.TipoMercado.Value));
            }

            if (request.TipoTermo.HasValue)
            {                
                this.DataBase.AddInParameter(dbCommand, "TP_TERMO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoTermo?>(request.TipoTermo.Value)));
            }

            if (!String.IsNullOrEmpty(request.Titulo.Codigo))
            {
                
                this.DataBase.AddInParameter(dbCommand, "CD_NEGOCIO", DbType.AnsiString, request.Titulo.Codigo.ToUpper());
            }

            if (request.Titulo.FatorCotacao.HasValue)// && request.Titulo.FatorCotacao != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {               
                this.DataBase.AddInParameter(dbCommand, "FT_VALORIZACAO", DbType.Decimal, request.Titulo.FatorCotacao);//20080412 11:58 - Alterado - DMilanez.7Comm
            }

            if (!String.IsNullOrEmpty(request.Titulo.Especificacao))
            {              
                this.DataBase.AddInParameter(dbCommand, "CD_ESPECIF", DbType.AnsiString, request.Titulo.Especificacao.ToUpper());
            }

            if (!String.IsNullOrEmpty(request.Titulo.Descricao))
            {
                
                this.DataBase.AddInParameter(dbCommand, "NM_NOMRES", DbType.AnsiString, request.Titulo.Descricao.ToUpper());
            }

            if (request.DiasLiquidacao.HasValue)// && request.DiasLiquidacao > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "ID_LIQUID", DbType.Int32, request.DiasLiquidacao.Value);
            }

            if (request.PrazoTermo.HasValue)// && request.PrazoTermo > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {
                
                this.DataBase.AddInParameter(dbCommand, "TP_VCOTER", DbType.Int32, request.PrazoTermo.Value);
            }

            if (request.VencimentoOpcoesTermo.HasValue)// && request.VencimentoOpcoesTermo.Value != DateTime.MinValue)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "DT_OPCOES", DbType.Date, request.VencimentoOpcoesTermo.Value);
            }

            if (!String.IsNullOrEmpty(request.TituloObjeto))
            {
                
                this.DataBase.AddInParameter(dbCommand, "CD_TITOBJ", DbType.AnsiString, request.TituloObjeto.ToUpper());
            }

            if (request.Quantidade.HasValue)// && request.Quantidade.Value > 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "QT_NEGOCIO", DbType.Int32, request.Quantidade.Value);
            }

            if (request.Preco.HasValue)// && request.Preco != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
            {                
                this.DataBase.AddInParameter(dbCommand, "VL_NEGOCIO", DbType.Decimal, request.Preco);
            }

            //20080401 15:50 - Alterado de forma a considerar como filtro apenas se for true  - DMilanez.7Comm
            if (request.PontaGeradoraOferta)
            {
                this.DataBase.AddInParameter(dbCommand, "TP_GERAOFERTA", DbType.AnsiString, "S");
            }

            //20080401 15:50 - Alterado de forma a considerar como filtro apenas se for true  - DMilanez.7Comm
            if (request.NaoLiquidaNota)
            {
                this.DataBase.AddInParameter(dbCommand, "FT_LIQNOT", DbType.Int32, 0);//0 ao invéz de 1 devido a semantica do campo
            }

            //20080401 15:51 - Alterado de forma a considerar como filtro apenas se for true - DMilanez.7Comm
            if (request.NegociadoAfterMarket)
            {
                this.DataBase.AddInParameter(dbCommand, "IN_AFTERM", DbType.AnsiString, "S");//0 ao invéz de 1 devido a semantica do campo                
            }

            if (!String.IsNullOrEmpty(request.Observacao))
            {               
                this.DataBase.AddInParameter(dbCommand, "DS_OBS", DbType.AnsiString, request.Observacao.ToUpper());
            }
            //20080901 11:30 - Incluída atribuição de valor aos parâmetros DataPregão - Ptruiz.gp
            if(request.DataPregao.HasValue)
            {
                //this.DataBase.AddInParameter(dbCommand, "Data_Pregao", DbType.DateTime,EnumConverter.ToString<BusinessEntity.Enum.TipoCasamento>(DBReturnStr(request.TipoCasamento.Value)));
                this.DataBase.AddInParameter(dbCommand, "Data_Pregao", DbType.DateTime, request.DataPregao.Value);
            }
            if(request.TipoLiquidacaoNegocio.HasValue)
            {
                this.DataBase.AddInParameter(dbCommand, "ID_TPLIQ", DbType.Int32, EnumConverter.ToString<BusinessEntity.Enum.TipoLiquidacaoNegocio>(request.TipoLiquidacaoNegocio.Value));
            }

            if (request.Correspondente != null)
            {
                if (request.Correspondente.Codigo.HasValue)// && request.Correspondente.Codigo != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
                {                    
                    this.DataBase.AddInParameter(dbCommand, "CD_CORRESP", DbType.Int32, request.Correspondente.Codigo);
                }

                if (request.Correspondente.PercentualComissao.HasValue)// && request.Correspondente.PercentualComissao != 0)//20080424 14:53 - Alterado para atender ao chamado 3612 - DMilanez.7Comm
                {                   
                    this.DataBase.AddInParameter(dbCommand, "PC_COMISSAO_CORRESP", DbType.Decimal, request.Correspondente.PercentualComissao);
                }
            }

            if (
                     request.TipoEstrategia.HasValue &&
                     request.TipoEstrategia != BusinessEntity.Enum.TipoEstrategia.Nenhuma
                    
                )
            {
                this.DataBase.AddInParameter(dbCommand, "TP_LIQUID", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoEstrategia?>(request.TipoEstrategia.Value)));
            }

            if (request.TipoOfertaBovespaFix.HasValue) 
            {

                this.DataBase.AddInParameter(dbCommand, "TP_LIQUID", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoOfertaBovespaFix?>(request.TipoOfertaBovespaFix.Value)));
            }
            //Ptruiz.gp - 2008.12.12 -  Alterado para atender ao bug 4705
            if (request.TipoOrigem.HasValue)
            {
                this.DataBase.AddInParameter(dbCommand, "TP_ORIGEM", DbType.AnsiString, EnumConverter.ToString<BusinessEntity.Enum.TipoOrigemNegocio>(request.TipoOrigem.Value));
            }
            #endregion parametros

            IDataReader reader = this.DataBase.ExecuteReader(dbCommand);

            while (reader.Read())
            {
                BusinessEntity.Negocio negocio = new BusinessEntity.Negocio();
                negocio.Titulo = new Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Titulo();
                negocio.Correspondente = new Sinacor.Servico.Bovespa.Cliente.BusinessEntity.Correspondente();
                
                negocio.DataPregao = reader.GetValue<DateTime>("DT_PREGAO");
                negocio.DataMovimento = reader.GetValue<DateTime>("DT_MOVIMENTO");
                negocio.NumeroNegocio = reader.GetValue<System.Int32>("NR_NEGOCIO");
                negocio.HoraNegocio = reader.GetValue<DateTime>("HH_NEGOCIO");

                if (negocio.DataPregao.HasValue && negocio.HoraNegocio.HasValue)
                    negocio.HoraNegocio = new DateTime(negocio.DataPregao.Value.Year, negocio.DataPregao.Value.Month, negocio.DataPregao.Value.Day,
                                                        negocio.HoraNegocio.Value.Hour, negocio.HoraNegocio.Value.Minute, 0);
                else
                    negocio.HoraNegocio = null;

                negocio.TipoMercado = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoMercado>(DBReturnStr(reader["TP_MERCADO"]));

                negocio.Titulo.Codigo = DBReturnStr(reader["CD_NEGOCIO"]);

                negocio.Quantidade = reader.GetValue<decimal>("QT_NEGOCIO");
                negocio.Saldo = reader.GetValue<decimal>("QT_SALDO");
                negocio.QuantidadeCasada = reader.GetValue<decimal>("QT_CASADA");
                if(reader["VL_NEGOCIO"] != DBNull.Value)
                    negocio.Preco = reader.GetValue<decimal>("VL_NEGOCIO");
                negocio.CodigoCliente = reader.GetValue<System.Int32>("CD_CLIENTE");
                
                negocio.Bolsa = DBReturnStr(reader["CD_BOLSAMOV"]);

                negocio.TipoNaturezaOperacao = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoNaturezaOperacao>(DBReturnStr(reader["CD_NATOPE"]));

                negocio.ContraParte = reader.GetValue<System.Int32>("CD_CONTRAPARTE");
                try
                {
                    string tpLiquid;
                    
                    tpLiquid =  DBReturnStr(reader["TP_LIQUID"]);
                        if (tpLiquid == "NOC" || tpLiquid == "NOV")
                            tpLiquid = "NOR";

                        negocio.TipoEstrategia = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoEstrategia>(tpLiquid);
                   
                }
                catch
                {
                    try
                    {
                        negocio.TipoOfertaBovespaFix = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoOfertaBovespaFix>(DBReturnStr(reader["TP_LIQUID"]));
                    }
                    catch
                    {
                        negocio.TipoEstrategia = null;
                        negocio.TipoOfertaBovespaFix = null;
                    }
                }

                negocio.Correspondente.Codigo = reader.GetValue<System.Int32>("CD_CORRESP");
                negocio.DiasLiquidacao = reader.GetValue<System.Int32>("ID_LIQUID");

                negocio.DescricaoOperador = DBReturnStr(reader["NM_USUARIO"]);

                negocio.DigitoNegocio = DBReturnInt(reader["DV_NEGOCIO"]);

                negocio.Titulo.Especificacao = DBReturnStr(reader["CD_ESPECIF"]);

                negocio.Titulo.NomeSA = DBReturnStr(reader["NM_NOMRES"]);

                negocio.Titulo.Descricao = negocio.Titulo.NomeSA + " " + negocio.Titulo.Especificacao;
                negocio.NomeSA = negocio.Titulo.NomeSA;
                negocio.Especificacao = negocio.Titulo.Especificacao;

                negocio.TipoTermo = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoTermo>(DBReturnStr(reader["TP_TERMO"]));

                if(reader["TP_ORIGEM"] != null && reader["TP_ORIGEM"] != DBNull.Value)
                    negocio.TipoOrigem = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoOrigemNegocio>(DBReturnStr(reader["TP_ORIGEM"]));

                //negocio.ContraParte = reader.GetValue<System.Int32>("CD_CONTRAPARTE");

                negocio.Observacao = DBReturnStr(reader["DS_OBS"]);

                negocio.FatorValorizacao = reader.GetValue<decimal>("FT_VALORIZACAO");
                
                negocio.VencimentoOpcoesTermo = DBReturnDtTimeNull(reader["DT_OPCOES"]);

                //negocio.TipoIndicadorOrigem = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoIndicadorOrigemNegocio>(DBReturnStr(reader["IN_ORINEG"]));

                negocio.PontaGeradoraOferta = DBReturnBool(reader["TP_GERAOFERTA"]);

                negocio.PrazoTermo = DBReturnInt(reader["TP_VCOTER"]);

                negocio.Operador = DBReturnStr(reader["NM_USUARIO"]); 


                negocio.Correspondente.PercentualComissao = DBReturnDec(reader["PC_COMISSAO_CORRESP"]);

                negocio.TituloObjeto = DBReturnStr(reader["CD_TITOBJ"]);

                negocio.Titulo.CodigoISIN = DBReturnStr(reader["CD_CODISI"]);

                negocio.CodigoCasamento = DBReturnStr(reader["CD_CODCAS"]);

                negocio.NegociadoAfterMarket = DBReturnBool(reader["IN_AFTERM"]);

                //Ptruiz.gp - 2008.12.11 - Alteração: Não estava trazendo corretamente. Bug 4704 
                //negocio.NaoLiquidaNota = DBReturnBool(reader["FT_LIQNOT"]);
                if ((reader.GetValue<System.Int32>("FT_LIQNOT")) == 0)
                {
                    negocio.NaoLiquidaNota = true;
                }
                if ((reader.GetValue<System.Int32>("FT_LIQNOT")) == 1)
                {
                    negocio.NaoLiquidaNota = false;
                }

                
                negocio.TipoLiquidacaoNegocio = EnumConverter.Parse<Ordens.BusinessEntity.Enum.TipoLiquidacaoNegocio>(DBReturnStr(reader["ID_TPLIQ"]));

                if (negocio.QuantidadeCasada != negocio.Quantidade && negocio.QuantidadeCasada != 0)
                    negocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.CasadasParte;
                else if (negocio.QuantidadeCasada == 0)
                    negocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.NaoCasadas;
                else if (negocio.QuantidadeCasada == negocio.Quantidade)
                    negocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.Casadas;


                response.Add(negocio);
            }

            reader.Close();
            return response;
        }

        public List<BusinessEntity.Negocio> ConsultarNegociosOrdem(BusinessEntity.Ordem request)
        {
            //BusinessEntity.Negocio negocio = null;
            List<BusinessEntity.Negocio> response = new List<BusinessEntity.Negocio>();
            OracleDataBase dbNegocio = this.DataBase;

            #region sql_principal

            StringBuilder sql = new StringBuilder();
            sql.Append(" SELECT");
            sql.Append(" TORNEGD.DT_MOVIMENTO,");
            sql.Append(" TORNEGD.NR_NEGOCIO,");
            sql.Append(" TORNEGD.DV_NEGOCIO,");
            sql.Append(" TORNEGD.HH_NEGOCIO,");
            sql.Append(" TORNEGD.TP_MERCADO,");
            sql.Append(" TORNEGD.CD_NEGOCIO,");
            sql.Append(" TORNEGD.CD_BOLSAMOV,");
            sql.Append(" TORNEGD.QT_NEGOCIO - NVL(TORNEGD.QT_CASADA,0) QT_SALDO, ");
            sql.Append(" TORNEGD.VL_NEGOCIO,");
            sql.Append(" TORNEGD.DT_PREGAO,");
            sql.Append(" TORNEGD.CD_NATOPE,");
            sql.Append(" TORNEGD.QT_NEGOCIO,");
            sql.Append(" TORNEGD.QT_CASADA,");
            sql.Append(" TORNEGD.CD_CONTRAPARTE,");
            sql.Append(" TORNEGD.TP_LIQUID,");
            sql.Append(" TORNEGD.CD_CORRESP,");
            sql.Append(" TORNEGD.ID_LIQUID,");
            sql.Append(" NVL(TORNEGD.CD_CLIENTE,0) CD_CLIENTE,");
            sql.Append(" TGEUSUARIO.NM_USUARIO,");
            sql.Append(" TORNEGD.ID_TPLIQ ");//20080416 15:37 - Adicionado - DMilanez.7Comm
            sql.Append(" FROM");
            sql.Append(" TORNEGD ,");
            sql.Append(" TOROPERA ,");
            sql.Append(" TGEUSUARIO ,");
            sql.Append("( SELECT DISTINCT");
            sql.Append("         CD_BOLSAMOV,");
            sql.Append("         CD_NATOPE,");
            sql.Append("         NR_NEGOCIO,");
            sql.Append("         CD_NEGOCIO");
            sql.Append("    FROM TOREXEC");
            sql.Append("   WHERE DT_NEGOCIO   = :Data_pregao");
            sql.Append("     AND DT_DATORD    = :Data_ordem");
            sql.Append("     AND NR_SEQORD    = :Numero_ordem");
            sql.Append("     AND NR_SUBSEQ    = :Sub_ordem ) TOREXEC");
            sql.Append(" WHERE");
            sql.Append("     TORNEGD.DT_PREGAO     = :Data_pregao");
            sql.Append(" AND TORNEGD.CD_OPERA_MEGA = TOROPERA.CD_OPERA_MEGA (+)");
            sql.Append(" AND TOROPERA.CD_OPERADOR  = TGEUSUARIO.CD_USUARIO (+)");
            sql.Append(" AND TOREXEC.CD_BOLSAMOV   = TORNEGD.CD_BOLSAMOV");
            sql.Append(" AND TOREXEC.CD_NATOPE     = TORNEGD.CD_NATOPE");
            sql.Append(" AND TOREXEC.NR_NEGOCIO    = TORNEGD.NR_NEGOCIO");
            sql.Append(" AND TOREXEC.CD_NEGOCIO	   = TORNEGD.CD_NEGOCIO");

            sql.Append(" ORDER BY TORNEGD.DT_PREGAO, TORNEGD.NR_NEGOCIO");

            DbCommand dbCommand = dbNegocio.GetSqlStringCommand(sql.ToString());

            #region parametros

            //--filtro Pregao
            dbNegocio.AddInParameter(dbCommand, "Data_pregao", DbType.Date, request.DataPregao);

            //--filtro Data Ordem
            dbNegocio.AddInParameter(dbCommand, "Data_ordem", DbType.Date, request.DataOrdem);

            //--filtro DataNumero Ordem
            dbNegocio.AddInParameter(dbCommand, "Numero_ordem", DbType.Int32, request.NumeroOrdem);

            //--filtro SubSequencia Ordem
            dbNegocio.AddInParameter(dbCommand, "Sub_ordem", DbType.Int32, request.NumeroOrdemSubSequencia);

            #endregion

            #endregion

            IDataReader dataReader = dbNegocio.ExecuteReader(dbCommand);

            while (dataReader.Read())
            {
                response.Add(LerNegocioOrdens(dataReader));
            }
            dataReader.Close();
            return response;
        }

        public void IncluirNegocio(BusinessEntity.Negocio request)
        {
            //OracleDataBase db = this.DataBase;
            OracleDataBase db = this.DataBase;

            DbCommand dbCommand;
            StringBuilder sql = new StringBuilder();

            sql.Append("INSERT INTO TORNEGD ");
            sql.Append(" ( TORNEGD.DT_MOVIMENTO,");
            sql.Append(" TORNEGD.DT_PREGAO,");
            sql.Append(" TORNEGD.HH_NEGOCIO,");
            sql.Append(" TORNEGD.CD_BOLSAMOV,");
            sql.Append(" TORNEGD.CD_CORRESP,");
            sql.Append(" TORNEGD.PC_COMISSAO_CORRESP,");
            sql.Append(" TORNEGD.NR_NEGOCIO,");
            sql.Append(" TORNEGD.DV_NEGOCIO,");
            sql.Append(" TORNEGD.CD_NATOPE,");
            sql.Append(" TORNEGD.TP_MERCADO,");
            sql.Append(" TORNEGD.CD_NEGOCIO,");
            sql.Append(" TORNEGD.CD_ESPECIF,");
            sql.Append(" TORNEGD.NM_NOMRES,");
            sql.Append(" TORNEGD.QT_NEGOCIO,");
            sql.Append(" TORNEGD.QT_ESPECIFICADA,");
            sql.Append(" TORNEGD.VL_NEGOCIO,");
            sql.Append(" TORNEGD.TP_TERMO,");
            sql.Append(" TORNEGD.TP_ORIGEM,");
            sql.Append(" TORNEGD.CD_CONTRAPARTE,");
            sql.Append(" TORNEGD.DS_OBS,");
            sql.Append(" TORNEGD.FT_VALORIZACAO,");
            sql.Append(" TORNEGD.DT_OPCOES,");
            sql.Append(" TORNEGD.TP_GERAOFERTA,");
            sql.Append(" TORNEGD.QT_CASADA,");
            sql.Append(" TORNEGD.TP_VCOTER, ");
            sql.Append(" TORNEGD.IN_ORINEG, ");
            sql.Append(" TORNEGD.TP_LIQUID,");
            sql.Append(" TORNEGD.CD_TITOBJ, ");
            sql.Append(" TORNEGD.CD_CODISI, ");
            sql.Append(" TORNEGD.CD_CODCAS, ");
            sql.Append(" TORNEGD.CD_CLIENTE,");
            sql.Append(" TORNEGD.IN_AFTERM, ");
            sql.Append(" TORNEGD.ID_LIQUID,");
            sql.Append(" TORNEGD.NR_OFCPMEGA,");
            sql.Append(" TORNEGD.NR_OFVDMEGA,");
            sql.Append(" TORNEGD.NR_OFEMEGA,");
            sql.Append(" TORNEGD.CD_OPERA_MEGA,");
            sql.Append(" TORNEGD.IN_BROKERAGEM,");
            sql.Append(" TORNEGD.FT_LIQNOT, ");
            sql.Append(" TORNEGD.ID_TPLIQ ) ");
            sql.Append("VALUES ");
            sql.Append("( :DT_MOVIMENTO,");
            sql.Append(" :DT_PREGAO,");
            sql.Append(" :HH_NEGOCIO,");
            sql.Append(" :CD_BOLSAMOV,");
            sql.Append(" :CD_CORRESP,");
            sql.Append(" :PC_COMISSAO_CORRESP,");
            sql.Append(" :NR_NEGOCIO,");
            sql.Append(" :DV_NEGOCIO,");
            sql.Append(" :CD_NATOPE,");
            sql.Append(" :TP_MERCADO,");
            sql.Append(" :CD_NEGOCIO,");
            sql.Append(" :CD_ESPECIF,");
            sql.Append(" :NM_NOMRES,");
            sql.Append(" :QT_NEGOCIO,");
            sql.Append(" :QT_ESPECIFICADA,");
            sql.Append(" :VL_NEGOCIO,");
            sql.Append(" :TP_TERMO,");
            sql.Append(" :TP_ORIGEM,");
            sql.Append(" :CD_CONTRAPARTE,");
            sql.Append(" :DS_OBS,");
            sql.Append(" :FT_VALORIZACAO,");
            sql.Append(" :DT_OPCOES,");
            sql.Append(" :TP_GERAOFERTA,");
            sql.Append(" :QT_CASADA,");
            sql.Append(" :TP_VCOTER, ");
            sql.Append(" :IN_ORINEG, ");
            sql.Append(" :TP_LIQUID,");
            sql.Append(" :CD_TITOBJ, ");
            sql.Append(" :CD_CODISI, ");
            sql.Append(" :CD_CODCAS, ");
            sql.Append(" :CD_CLIENTE,");
            sql.Append(" :IN_AFTERM, ");
            sql.Append(" :ID_LIQUID,");
            sql.Append(" :NR_OFCPMEGA,");
            sql.Append(" :NR_OFVDMEGA,");
            sql.Append(" :NR_OFEMEGA,");
            sql.Append(" :CD_OPERA_MEGA,");
            sql.Append(" :IN_BROKERAGEM,");
            sql.Append(" :FT_LIQNOT, ");
            sql.Append(" :ID_TPLIQ )");


            dbCommand = db.GetSqlStringCommand(sql.ToString());

            db.AddInParameter(dbCommand, ":DT_MOVIMENTO", DbType.DateTime, request.DataMovimento);
            db.AddInParameter(dbCommand, ":DT_PREGAO", DbType.DateTime, request.DataPregao);
            db.AddInParameter(dbCommand, ":HH_NEGOCIO", DbType.AnsiString, request.HoraNegocio.HasValue ? request.HoraNegocio.Value.ToString("HH:mm") : null);
            db.AddInParameter(dbCommand, ":CD_BOLSAMOV", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa));

            if (request.Correspondente != null)// && request.Correspondente.Codigo > 0)//20080425 10:15 - Alterado para atender ao chamado 3630 - DMilanez.7Comm
                db.AddInParameter(dbCommand, ":CD_CORRESP", DbType.Int32, request.Correspondente.Codigo);
            else
                db.AddInParameter(dbCommand, ":CD_CORRESP", DbType.Int32, 0);//20080425 10:16 - Alterado para atender ao chamado 3630 - DMilanez.7Comm

            db.AddInParameter(dbCommand, ":PC_COMISSAO_CORRESP", DbType.Decimal, request.Correspondente.PercentualComissao);

            db.AddInParameter(dbCommand, ":NR_NEGOCIO", DbType.Int32, request.NumeroNegocio);
            db.AddInParameter(dbCommand, ":DV_NEGOCIO", DbType.Int32, request.DigitoNegocio);
            db.AddInParameter(dbCommand, ":CD_NATOPE", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao)));
            db.AddInParameter(dbCommand, ":TP_MERCADO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoMercado?>(request.TipoMercado)));
            db.AddInParameter(dbCommand, ":CD_NEGOCIO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo));
            db.AddInParameter(dbCommand, ":CD_ESPECIF", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Especificacao));
            db.AddInParameter(dbCommand, ":NM_NOMRES", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.NomeSA));
            db.AddInParameter(dbCommand, ":QT_NEGOCIO", DbType.Decimal, request.Quantidade);
            db.AddInParameter(dbCommand, ":QT_ESPECIFICADA", DbType.Decimal, request.QuantidadeEspecificada);
            db.AddInParameter(dbCommand, ":VL_NEGOCIO", DbType.Decimal, request.Preco);
            db.AddInParameter(dbCommand, ":TP_TERMO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoTermo?>(request.TipoTermo)));

            db.AddInParameter(dbCommand, ":TP_ORIGEM", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoOrigemNegocio?>(request.TipoOrigem)));

            db.AddInParameter(dbCommand, ":CD_CONTRAPARTE", DbType.Int32, request.ContraParte);
            db.AddInParameter(dbCommand, ":DS_OBS", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Observacao));
            db.AddInParameter(dbCommand, ":FT_VALORIZACAO", DbType.Decimal, request.FatorValorizacao);
            db.AddInParameter(dbCommand, ":DT_OPCOES", DbType.DateTime, request.VencimentoOpcoesTermo);
            db.AddInParameter(dbCommand, ":TP_GERAOFERTA", DbType.AnsiString, request.PontaGeradoraOferta ? "S" : "N");
            db.AddInParameter(dbCommand, ":QT_CASADA", DbType.Decimal, request.QuantidadeCasada);
            db.AddInParameter(dbCommand, ":TP_VCOTER", DbType.Int32, request.PrazoTermo);

            db.AddInParameter(dbCommand, ":IN_ORINEG", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoIndicadorOrigemNegocio?>(request.TipoIndicadorOrigem)));

            if (request.TipoEstrategia.HasValue)
                db.AddInParameter(dbCommand, ":TP_LIQUID", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoEstrategia?>(request.TipoEstrategia)));
            else if (request.TipoOfertaBovespaFix.HasValue)
                db.AddInParameter(dbCommand, ":TP_LIQUID", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoOfertaBovespaFix?>(request.TipoOfertaBovespaFix)));
            else
                db.AddInParameter(dbCommand, ":TP_LIQUID", DbType.AnsiString, null);

            db.AddInParameter(dbCommand, ":CD_TITOBJ", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.TituloObjeto));
            db.AddInParameter(dbCommand, ":CD_CODISI", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.CodigoISIN));

            db.AddInParameter(dbCommand, ":CD_CODCAS", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.CodigoCasamento));

            db.AddInParameter(dbCommand, ":CD_CLIENTE", DbType.Int32, request.CodigoCliente);
            db.AddInParameter(dbCommand, ":IN_AFTERM", DbType.AnsiString, request.NegociadoAfterMarket ? "S" : "N");
            db.AddInParameter(dbCommand, ":ID_LIQUID", DbType.Int32, request.DiasLiquidacao);
            db.AddInParameter(dbCommand, ":NR_OFCPMEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":NR_OFVDMEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":NR_OFEMEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":CD_OPERA_MEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":IN_BROKERAGEM", DbType.AnsiString, "N");
            db.AddInParameter(dbCommand, ":FT_LIQNOT", DbType.Int32, request.NaoLiquidaNota ? 0 : 1);
            db.AddInParameter(dbCommand, ":ID_TPLIQ", DbType.Int32, Convert.ToInt32(Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoLiquidacaoNegocio?>(request.TipoLiquidacaoNegocio))));

            db.ExecuteNonQuery(dbCommand);
        }

        /// <summary>
        /// Metodo responsavel 
        /// 
        /// </summary>
        /// <param name="request"></param>
        public void AlterarNegocio(BusinessEntity.Negocio request)
        {
            OracleDataBase db = this.DataBase;

            DbCommand dbCommand;
            StringBuilder sql = new StringBuilder();

            sql.Append(" UPDATE TORNEGD SET");
            sql.Append(" TORNEGD.DT_MOVIMENTO = :DT_MOVIMENTO,");
            sql.Append(" TORNEGD.HH_NEGOCIO = :HH_NEGOCIO,");
            sql.Append(" TORNEGD.CD_CORRESP = :CD_CORRESP,");
            sql.Append(" TORNEGD.PC_COMISSAO_CORRESP = :PC_COMISSAO_CORRESP,");
            sql.Append(" TORNEGD.DV_NEGOCIO = :DV_NEGOCIO,");
            sql.Append(" TORNEGD.TP_MERCADO = :TP_MERCADO,");
            sql.Append(" TORNEGD.CD_ESPECIF = :CD_ESPECIF,");
            sql.Append(" TORNEGD.NM_NOMRES = :NM_NOMRES,");
            sql.Append(" TORNEGD.QT_NEGOCIO = :QT_NEGOCIO,");
            sql.Append(" TORNEGD.QT_ESPECIFICADA = :QT_ESPECIFICADA,");
            sql.Append(" TORNEGD.VL_NEGOCIO = :VL_NEGOCIO,");
            sql.Append(" TORNEGD.TP_TERMO = :TP_TERMO,");
            sql.Append(" TORNEGD.TP_ORIGEM = :TP_ORIGEM,");
            sql.Append(" TORNEGD.CD_CONTRAPARTE = :CD_CONTRAPARTE,");
            sql.Append(" TORNEGD.DS_OBS = :DS_OBS,");
            sql.Append(" TORNEGD.FT_VALORIZACAO = :FT_VALORIZACAO,");
            sql.Append(" TORNEGD.DT_OPCOES = :DT_OPCOES,");
            sql.Append(" TORNEGD.TP_GERAOFERTA = :TP_GERAOFERTA,");
            sql.Append(" TORNEGD.QT_CASADA = :QT_CASADA,");
            sql.Append(" TORNEGD.TP_VCOTER = :TP_VCOTER,");
            sql.Append(" TORNEGD.IN_ORINEG = :IN_ORINEG,");
            sql.Append(" TORNEGD.TP_LIQUID = :TP_LIQUID,");
            sql.Append(" TORNEGD.CD_TITOBJ = :CD_TITOBJ,");
            sql.Append(" TORNEGD.CD_CODISI = :CD_CODISI,");
            sql.Append(" TORNEGD.CD_CODCAS = :CD_CODCAS,");
            sql.Append(" TORNEGD.CD_CLIENTE = :CD_CLIENTE,");
            sql.Append(" TORNEGD.IN_AFTERM = :IN_AFTERM,");
            sql.Append(" TORNEGD.ID_LIQUID = :ID_LIQUID,");
            sql.Append(" TORNEGD.NR_OFCPMEGA = :NR_OFCPMEGA,");
            sql.Append(" TORNEGD.NR_OFVDMEGA = :NR_OFVDMEGA,");
            sql.Append(" TORNEGD.NR_OFEMEGA = :NR_OFEMEGA,");
            sql.Append(" TORNEGD.CD_OPERA_MEGA = :CD_OPERA_MEGA,");
            sql.Append(" TORNEGD.IN_BROKERAGEM = :IN_BROKERAGEM,");
            sql.Append(" TORNEGD.FT_LIQNOT = :FT_LIQNOT,");
            sql.Append(" TORNEGD.ID_TPLIQ = :ID_TPLIQ");
            sql.Append(" WHERE CD_BOLSAMOV = :CD_BOLSAMOV ");
            sql.Append(" AND CD_NATOPE   = :CD_NATOPE ");
            sql.Append(" AND CD_NEGOCIO  = :CD_NEGOCIO ");
            sql.Append(" AND NR_NEGOCIO  = :NR_NEGOCIO ");
            sql.Append(" AND DT_PREGAO   = :DT_PREGAO ");

            dbCommand = db.GetSqlStringCommand(sql.ToString());
            
            //filtro
            db.AddInParameter(dbCommand, ":CD_BOLSAMOV", DbType.AnsiString,Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa));
            db.AddInParameter(dbCommand, ":CD_NATOPE", DbType.AnsiString, Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao));
            db.AddInParameter(dbCommand, ":CD_NEGOCIO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo));
            db.AddInParameter(dbCommand, ":NR_NEGOCIO", DbType.Int32, request.NumeroNegocio);
            db.AddInParameter(dbCommand, ":DT_PREGAO", DbType.DateTime, request.DataPregao);

            db.AddInParameter(dbCommand, ":DT_MOVIMENTO", DbType.DateTime, request.DataMovimento);
            db.AddInParameter(dbCommand, ":HH_NEGOCIO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.HoraNegocio.HasValue ? request.HoraNegocio.Value.ToString("HH:mm") : null));

            //20080425 10:15 - Alterado para atender ao chamado 3630 - DMilanez.7Comm
            if (request.Correspondente != null)
                db.AddInParameter(dbCommand, ":CD_CORRESP", DbType.Int32, request.Correspondente.Codigo);
            else
                db.AddInParameter(dbCommand, ":CD_CORRESP", DbType.Int32, 0);
            
            db.AddInParameter(dbCommand, ":PC_COMISSAO_CORRESP", DbType.Decimal, request.Correspondente.PercentualComissao);

            db.AddInParameter(dbCommand, ":DV_NEGOCIO", DbType.Int32, request.DigitoNegocio);            
            db.AddInParameter(dbCommand, ":TP_MERCADO", DbType.AnsiString,
                Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoMercado?>(request.TipoMercado)));            
            db.AddInParameter(dbCommand, ":CD_ESPECIF", DbType.AnsiString, 
                Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Especificacao));
            db.AddInParameter(dbCommand, ":NM_NOMRES", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.NomeSA) );
            db.AddInParameter(dbCommand, ":QT_NEGOCIO", DbType.Decimal, request.Quantidade);
            db.AddInParameter(dbCommand, ":QT_ESPECIFICADA", DbType.Decimal, request.QuantidadeEspecificada);
            db.AddInParameter(dbCommand, ":VL_NEGOCIO", DbType.Decimal, request.Preco);
            db.AddInParameter(dbCommand, ":TP_TERMO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoTermo?>(request.TipoTermo)));
            db.AddInParameter(dbCommand, ":TP_ORIGEM", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoOrigemNegocio?>(request.TipoOrigem)));
            db.AddInParameter(dbCommand, ":CD_CONTRAPARTE", DbType.Int32, request.ContraParte);
            db.AddInParameter(dbCommand, ":DS_OBS", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Observacao));
            db.AddInParameter(dbCommand, ":FT_VALORIZACAO", DbType.Decimal, request.FatorValorizacao);
            db.AddInParameter(dbCommand, ":DT_OPCOES", DbType.DateTime, request.VencimentoOpcoesTermo);
            db.AddInParameter(dbCommand, ":TP_GERAOFERTA", DbType.AnsiString, request.PontaGeradoraOferta ? "S" : "N");
            db.AddInParameter(dbCommand, ":QT_CASADA", DbType.Decimal, request.QuantidadeCasada);
            db.AddInParameter(dbCommand, ":TP_VCOTER", DbType.Int32, request.PrazoTermo);
            db.AddInParameter(dbCommand, ":IN_ORINEG", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoIndicadorOrigemNegocio?>(request.TipoIndicadorOrigem)));

            //20080419 13:30 - Alterado para atender ao chamado 3326 - DMilanez.7Comm
            if (request.TipoEstrategia.HasValue)
                db.AddInParameter(dbCommand, ":TP_LIQUID", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoEstrategia?>(request.TipoEstrategia)));
            else if (request.TipoOfertaBovespaFix.HasValue)
                db.AddInParameter(dbCommand, ":TP_LIQUID", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoOfertaBovespaFix?>(request.TipoOfertaBovespaFix)));
            else
                db.AddInParameter(dbCommand, ":TP_LIQUID", DbType.AnsiString, null);

            db.AddInParameter(dbCommand, ":CD_TITOBJ", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.TituloObjeto));
            db.AddInParameter(dbCommand, ":CD_CODISI", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.CodigoISIN));
            db.AddInParameter(dbCommand, ":CD_CODCAS", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.CodigoCasamento));
            db.AddInParameter(dbCommand, ":CD_CLIENTE", DbType.Int32, request.CodigoCliente);
            db.AddInParameter(dbCommand, ":IN_AFTERM", DbType.AnsiString, request.NegociadoAfterMarket ? "S" : "N");
            db.AddInParameter(dbCommand, ":ID_LIQUID", DbType.Int32, request.DiasLiquidacao);
            db.AddInParameter(dbCommand, ":NR_OFCPMEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":NR_OFVDMEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":NR_OFEMEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":CD_OPERA_MEGA", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":IN_BROKERAGEM", DbType.Int32, 0);
            db.AddInParameter(dbCommand, ":FT_LIQNOT", DbType.Int32, request.NaoLiquidaNota ? 0 : 1);
            db.AddInParameter(dbCommand, ":ID_TPLIQ", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoLiquidacaoNegocio?>(request.TipoLiquidacaoNegocio)));

            db.ExecuteNonQuery(dbCommand);
        }

        public void ExcluirNegocio(BusinessEntity.Negocio request)
        {
            OracleDataBase db = this.DataBase;

            StringBuilder sql = new StringBuilder();

            sql.Append(" DELETE TORNEGD");
            sql.Append(" WHERE CD_BOLSAMOV = :CD_BOLSAMOV");
            sql.Append(" AND CD_NATOPE   = :CD_NATOPE");
            sql.Append(" AND CD_NEGOCIO  = :CD_NEGOCIO");
            sql.Append(" AND NR_NEGOCIO  = :NR_NEGOCIO");
            sql.Append(" AND DT_PREGAO   = :DT_PREGAO");

            DbCommand dbCommand = db.GetSqlStringCommand(sql.ToString());

            db.AddInParameter(dbCommand, ":CD_BOLSAMOV", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa));
            db.AddInParameter(dbCommand, ":CD_NATOPE", DbType.AnsiString, Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao));
            db.AddInParameter(dbCommand, ":CD_NEGOCIO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo));
            db.AddInParameter(dbCommand, ":NR_NEGOCIO", DbType.Int32, request.NumeroNegocio.Value);
            db.AddInParameter(dbCommand, ":DT_PREGAO", DbType.DateTime, request.DataPregao.Value);

            db.ExecuteNonQuery(dbCommand);
        }

        // <summary>
        /// Historico: ALT01
        /// Data : 11/01/2007
        /// Autor: Luciano Azevedo
        /// Obs.: Alteração de ENUMS
        /// </summary>
        /// <returns></returns>
        private Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Negocio LerNegocioOrdens(IDataReader reader)
        {
            BusinessEntity.Negocio negocio = new BusinessEntity.Negocio();
            negocio.Titulo = new Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Titulo();
            negocio.Correspondente = new Sinacor.Servico.Bovespa.Cliente.BusinessEntity.Correspondente();
            negocio.DataPregao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader["DT_PREGAO"]);
            negocio.DataMovimento = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader["DT_MOVIMENTO"]);
            negocio.NumeroNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader["NR_NEGOCIO"]);
            negocio.DigitoNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader["DV_NEGOCIO"]);
            
            negocio.HoraNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader["HH_NEGOCIO"]);

            if (negocio.DataPregao.HasValue && negocio.HoraNegocio.HasValue)
                negocio.HoraNegocio = new DateTime(negocio.DataPregao.Value.Year, negocio.DataPregao.Value.Month, negocio.DataPregao.Value.Day,
                                                    negocio.HoraNegocio.Value.Hour, negocio.HoraNegocio.Value.Minute, 0);
            else
                negocio.HoraNegocio = null;


            negocio.TipoMercado = EnumConverter.Parse<BusinessEntity.Enum.TipoMercado>(reader.GetValue<String>("TP_MERCADO"));
            negocio.Titulo.Codigo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["CD_NEGOCIO"]);
            negocio.Quantidade = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader["QT_NEGOCIO"]);
            negocio.Saldo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader["QT_SALDO"]);
            negocio.QuantidadeCasada = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader["QT_CASADA"]);
            negocio.Preco = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader["VL_NEGOCIO"]);
            negocio.CodigoCliente = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader["CD_CLIENTE"]);
            negocio.Bolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["CD_BOLSAMOV"]);
            negocio.TipoNaturezaOperacao = EnumConverter.Parse<BusinessEntity.Enum.TipoNaturezaOperacao>(DBReturnStr(reader["CD_NATOPE"]));
            negocio.ContraParte = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader["CD_CONTRAPARTE"]);

            ///Tentar ler o campo TP_LIQUID 
            ///se estiver armazenando uma estrategia
            try
            {
                //20080419 13:04 - Alterado para atender ao chamado 3326 - DMilanez.7Comm
                string tpLiquid;
                tpLiquid = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["TP_LIQUID"]);
                //20080424 16:58 - Alterado pois, segundo analista sinacor, pois nulo do ponto de vista do negocio nao e um valor valido para o campo - DMilanez.7Comm
                if (tpLiquid == "NOC" || tpLiquid == "NOV")// || string.IsNullOrEmpty(tpLiquid))
                    tpLiquid = "NOR";

                negocio.TipoEstrategia = Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoEstrategia>(tpLiquid);
            }
            catch
            {
                try
                {
                    ///se estiver armanzenando uma oferta bovespa fix
                    negocio.TipoOfertaBovespaFix = Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoOfertaBovespaFix>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["TP_LIQUID"]));
                }
                catch
                {
                    negocio.TipoEstrategia = null;
                    negocio.TipoOfertaBovespaFix = null;
                }
            }

            negocio.Correspondente.Codigo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader["CD_CORRESP"]);
            negocio.DiasLiquidacao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader["ID_LIQUID"]);
            negocio.DescricaoOperador = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["NM_USUARIO"]);

            if (negocio.QuantidadeCasada != negocio.Quantidade && negocio.QuantidadeCasada != 0)
                negocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.CasadasParte;
            else if (negocio.QuantidadeCasada == 0)
                negocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.NaoCasadas;
            else if (negocio.QuantidadeCasada == negocio.Quantidade)
                negocio.TipoSituacaoCasamentoOrdem = BusinessEntity.Enum.TipoSituacaoCasamento.Casadas;

            //20080416 15:39 - Adicionado - DMilanez.7Comm
            negocio.TipoLiquidacaoNegocio = Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoLiquidacaoNegocio>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["ID_TPLIQ"], true));

            return negocio;
        }


        /// Data:06/02/2008 13:42
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// CORRECAO
        /// Alterado para receber um be como parametro
        //public bool ConsultarFatorLiquidacao(BusinessEntity.Enum.TipoMercado? tipoMercado, BusinessEntity.Enum.TipoNaturezaOperacao? tipoNaturezaOperacao)
        public bool ConsultarFatorLiquidacao(BusinessEntity.Negocio request)
        {
            OracleDataBase dbOrdem = this.DataBase;

            StringBuilder sql = new StringBuilder();
            sql.AppendLine("SELECT ABS(TBOMERNAT.NR_FATLIQ)"); // Alterado Marcelo
            sql.AppendLine("FROM TBOMERNAT, TBOMERCADO");
            sql.AppendLine("WHERE");
            sql.AppendLine("TBOMERCADO.CD_NRMERC = TBOMERNAT.CD_NRMERC");
            sql.AppendLine("AND TBOMERCADO.CD_ALMERC = :CD_ALMERC");
            sql.AppendLine("AND TBOMERNAT.CD_NATOPE = :CD_NATOPE");

            DbCommand dbCommand = dbOrdem.GetSqlStringCommand(sql.ToString());

            dbOrdem.AddInParameter(dbCommand, "CD_ALMERC", DbType.AnsiString, Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoMercado?>(request.TipoMercado));
            dbOrdem.AddInParameter(dbCommand, "CD_NATOPE", DbType.AnsiString, Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao));

            String retorno = dbOrdem.ExecuteScalar(dbCommand).ToString();
            if (retorno == null)
                return false; ///alterado 12/08/2008
            else
                if (retorno.ToString() == "1")
                    return false;
                else
                    return true;
        }

        public BusinessEntity.ADR ConsultarADR(BusinessEntity.Parameter.ConsultarADR request) {
            OracleDataBase db = this.DataBase;
            DbCommand dbCommand;
            IDataReader reader;
            BusinessEntity.ADR response = new Sinacor.Servico.Bovespa.Ordens.BusinessEntity.ADR();
            StringBuilder sql = new StringBuilder();

            sql.Append(" SELECT CD_CODNEG, CD_CUSADR, CD_CLIENTE, DV_CLIENTE  ");      
            sql.Append(" FROM TGEPAPADR ");
            sql.Append(" WHERE CD_CODNEG = :CD_CODNEG ");

            dbCommand = db.GetSqlStringCommand(sql.ToString());

            db.AddInParameter(dbCommand, "CD_CODNEG", DbType.String, request.CodigoNegocio);

            reader = db.ExecuteReader(dbCommand);
            if (reader.Read())
            {
                response = new BusinessEntity.ADR();
                response.CodigoNegocio = reader.GetValue<System.String>("CD_CODNEG");
                response.CodigoCliente = reader.GetValue<System.Int32?>("CD_CLIENTE");
                response.CodigoCustodianteADR = reader.GetValue<System.Int32?>("CD_CUSADR");
                response.DigitoCliente = reader.GetValue<System.Int32?>("DV_CLIENTE");
            }
            reader.Close();
            return response;
        }
        

        public bool ConsultarDiasLiquidacao(int diasLiquidacao)
        {
            //OracleDataBase dbOrdem = this.DataBase;
            OracleDataBase dbOrdem = this.DataBase;

            StringBuilder sql = new StringBuilder();
            sql.AppendLine("SELECT 0 ");
            sql.AppendLine("FROM TBOHIST_INTR_CCOR ");
            sql.AppendLine("WHERE ");
            sql.AppendLine("NR_DIAS_LIQD = :NR_DIAS_LIQD ");

            DbCommand dbCommand = dbOrdem.GetSqlStringCommand(sql.ToString());

            dbOrdem.AddInParameter(dbCommand, "NR_DIAS_LIQD", DbType.Int32, diasLiquidacao);

            Object retorno = dbOrdem.ExecuteScalar(dbCommand);
            if (retorno == DBNull.Value || retorno == null)
                return false;
            else
                return true;
        }

        /// <summary>
        /// Data : 11/02/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao
        /// </summary>
        public void ExecutarProcPorNegDig(BusinessEntity.Negocio request, string sInCorresp)
        {
            ExecutarProcPorNegDig(request, "A", sInCorresp);
        }

        /// <summary>
        /// Metodo responsavel por executar a procedure PR_NEGOCIOS.POR_NEGDIG
        /// 
        /// </summary>
        /// <param name="request"></param>
        /// <param name="sTipoAtu"></param>
        /// <param name="sInCorresp"></param>
        public BusinessEntity.Resultado ExecutarProcPorNegDig(BusinessEntity.Negocio request, string sTipoAtu, string sInCorresp)
        {
            BusinessEntity.Resultado resultado = new BusinessEntity.Resultado();
            StringBuilder sql = new StringBuilder();

            sql.Append("DECLARE rettype BOOLEAN; ");
            sql.Append("BEGIN ");
            sql.Append("rettype:= pr_negocios.fOr_NegDig ( :P_sCdBolsamov , :P_sCdNegocio , :P_nNrNegocio ,");
            sql.Append(":P_sCdNatope , :P_sDtPregao , :P_sTipoAtu ,");
            sql.Append(":P_sInCorresp , :P_sMataDistr , :R_nErro ,");
            sql.Append(":R_sErro , :R_sArgs );");
            sql.Append("IF rettype THEN :R_Retorno := 1; ELSE :R_Retorno := 0; END IF; ");
            sql.Append("END; ");


            

            using (DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql.ToString()))
            {
                #region Adição dos parâmetros

                DbParameter parametroP_P_sCdBolsamov = dbCommand.CreateParameter();
                parametroP_P_sCdBolsamov.ParameterName = "P_sCdBolsamov";
                parametroP_P_sCdBolsamov.Direction = ParameterDirection.Input;
                parametroP_P_sCdBolsamov.DbType = DbType.AnsiString;
                parametroP_P_sCdBolsamov.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa);
                dbCommand.Parameters.Add(parametroP_P_sCdBolsamov);

                DbParameter parametroP_P_sCdNegocio = dbCommand.CreateParameter();
                parametroP_P_sCdNegocio.ParameterName = "P_sCdNegocio";
                parametroP_P_sCdNegocio.Direction = ParameterDirection.Input;
                parametroP_P_sCdNegocio.DbType = DbType.AnsiString;
                parametroP_P_sCdNegocio.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo);
                dbCommand.Parameters.Add(parametroP_P_sCdNegocio);

                DbParameter parametroP_P_nNrNegocio = dbCommand.CreateParameter();
                parametroP_P_nNrNegocio.ParameterName = "P_nNrNegocio";
                parametroP_P_nNrNegocio.Direction = ParameterDirection.Input;
                parametroP_P_nNrNegocio.DbType = DbType.Int32;
                parametroP_P_nNrNegocio.Value = request.NumeroNegocio.Value;
                dbCommand.Parameters.Add(parametroP_P_nNrNegocio);

                DbParameter parametroP_P_sCdNatope = dbCommand.CreateParameter();
                parametroP_P_sCdNatope.ParameterName = "P_sCdNatope";
                parametroP_P_sCdNatope.Direction = ParameterDirection.Input;
                parametroP_P_sCdNatope.DbType = DbType.AnsiString;
                parametroP_P_sCdNatope.Value = Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao);
                dbCommand.Parameters.Add(parametroP_P_sCdNatope);


                string dataPregaoFormatada = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.FormatarData(request.DataPregao.Value, "-");

                DbParameter parametro_P_sDtPregao = dbCommand.CreateParameter();
                parametro_P_sDtPregao.ParameterName = "P_sDtPregao";
                parametro_P_sDtPregao.Direction = ParameterDirection.Input;
                parametro_P_sDtPregao.DbType = DbType.AnsiString;
                parametro_P_sDtPregao.Value = dataPregaoFormatada;
                dbCommand.Parameters.Add(parametro_P_sDtPregao);



                DbParameter parametroP_P_sTipoAtu = dbCommand.CreateParameter();
                parametroP_P_sTipoAtu.ParameterName = "P_sTipoAtu";
                parametroP_P_sTipoAtu.Direction = ParameterDirection.Input;
                parametroP_P_sTipoAtu.DbType = DbType.AnsiString;
                parametroP_P_sTipoAtu.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(sTipoAtu);
                dbCommand.Parameters.Add(parametroP_P_sTipoAtu);

                DbParameter parametroP_P_sInCorresp = dbCommand.CreateParameter();
                parametroP_P_sInCorresp.ParameterName = "P_sInCorresp";
                parametroP_P_sInCorresp.Direction = ParameterDirection.Input;
                parametroP_P_sInCorresp.DbType = DbType.AnsiString;
                parametroP_P_sInCorresp.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(sInCorresp);
                dbCommand.Parameters.Add(parametroP_P_sInCorresp);

                DbParameter parametroP_P_sMataDistr = dbCommand.CreateParameter();
                parametroP_P_sMataDistr.ParameterName = "P_sMataDistr";
                parametroP_P_sMataDistr.Direction = ParameterDirection.Input;
                parametroP_P_sMataDistr.DbType = DbType.AnsiString;
                parametroP_P_sMataDistr.Value = "N";
                dbCommand.Parameters.Add(parametroP_P_sMataDistr);


                #region Parametros de Erro


                DbParameter parametroR_nErro = dbCommand.CreateParameter();
                parametroR_nErro.ParameterName = "R_nErro";
                parametroR_nErro.Direction = ParameterDirection.Output;
                parametroR_nErro.DbType = DbType.Int32;
                parametroR_nErro.Value = 0;

                dbCommand.Parameters.Add(parametroR_nErro);

                DbParameter parametroR_sErro = dbCommand.CreateParameter();
                parametroR_sErro.ParameterName = "R_sErro";
                parametroR_sErro.Direction = ParameterDirection.Output;
                parametroR_sErro.DbType = DbType.String;
                parametroR_sErro.Size = 4000;
                parametroR_sErro.Value = null;

                dbCommand.Parameters.Add(parametroR_sErro);

                DbParameter parametroR_sArgs = dbCommand.CreateParameter();
                parametroR_sArgs.ParameterName = "R_sArgs";
                parametroR_sArgs.Direction = ParameterDirection.Output;
                parametroR_sArgs.DbType = DbType.String;
                parametroR_sArgs.Size = 4000;
                parametroR_sArgs.Value = null;

                dbCommand.Parameters.Add(parametroR_sArgs);

                DbParameter parametrorettype = dbCommand.CreateParameter();
                parametrorettype.ParameterName = "R_Retorno";
                parametrorettype.Direction = ParameterDirection.Output;
                parametrorettype.DbType = DbType.Int32;
                parametrorettype.Value = 0;


                dbCommand.Parameters.Add(parametrorettype);

                #endregion


                #endregion

                #region Execução

                this.DataBase.ExecuteNonQuery(dbCommand);

                if (!Convert.ToBoolean(this.DataBase.GetParameterValue(dbCommand, "R_Retorno")))
                {
                    resultado.Sucesso = false;
                    resultado.CodigoErro = Convert.ToInt32(parametroR_nErro.Value);
                    resultado.Argumentos = Convert.ToString(parametroR_sArgs.Value);
                }
                else
                    resultado.Sucesso = true;

                #endregion
            }

            return resultado;
        }

        /// <summary>
        /// Metodo responsavel por executar a procedure PR_NEGOCIOS.NEGDIG
        /// Data:16/02/2008 20:40
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// </summary>
        /// <param name="request"></param>
        public BusinessEntity.Resultado ExecutarProcNegDige(BusinessEntity.Negocio request)
        {
            BusinessEntity.Resultado resultado = new BusinessEntity.Resultado();
            StringBuilder sql = new StringBuilder();

            sql.Append("DECLARE rettype BOOLEAN; ");
            sql.Append("BEGIN ");
            sql.Append("rettype:= pr_negocios.fOr_NegDigExcl  ( :P_sCdBolsamov , :P_sCdNegocio , :P_nNrNegocio ,");
            sql.Append(":P_sCdNatope , :P_sDtPregao, :R_nErro ,");
            sql.Append(":R_sErro , :R_sArgs );");
            sql.Append("IF rettype THEN :R_Retorno := 1; ELSE :R_Retorno := 0; END IF; ");
            sql.Append("END; ");




            using (DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql.ToString()))
            {
                #region Adição dos parâmetros


                DbParameter parametroP_P_sCdBolsamov = dbCommand.CreateParameter();
                parametroP_P_sCdBolsamov.ParameterName = "P_sCdBolsamov";
                parametroP_P_sCdBolsamov.Direction = ParameterDirection.Input;
                parametroP_P_sCdBolsamov.DbType = DbType.AnsiString;
                parametroP_P_sCdBolsamov.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa);
                dbCommand.Parameters.Add(parametroP_P_sCdBolsamov);


                DbParameter parametroP_P_sCdNegocio = dbCommand.CreateParameter();
                parametroP_P_sCdNegocio.ParameterName = "P_sCdNegocio";
                parametroP_P_sCdNegocio.Direction = ParameterDirection.Input;
                parametroP_P_sCdNegocio.DbType = DbType.AnsiString;
                parametroP_P_sCdNegocio.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo);
                dbCommand.Parameters.Add(parametroP_P_sCdNegocio);

                DbParameter parametroP_P_nNrNegocio = dbCommand.CreateParameter();
                parametroP_P_nNrNegocio.ParameterName = "P_nNrNegocio";
                parametroP_P_nNrNegocio.Direction = ParameterDirection.Input;
                parametroP_P_nNrNegocio.DbType = DbType.Int32;
                parametroP_P_nNrNegocio.Value = request.NumeroNegocio.Value;
                dbCommand.Parameters.Add(parametroP_P_nNrNegocio);
                
                DbParameter parametroP_P_sCdNatope = dbCommand.CreateParameter();
                parametroP_P_sCdNatope.ParameterName = "P_sCdNatope";
                parametroP_P_sCdNatope.Direction = ParameterDirection.Input;
                parametroP_P_sCdNatope.DbType = DbType.AnsiString;
                parametroP_P_sCdNatope.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao));
                dbCommand.Parameters.Add(parametroP_P_sCdNatope);


                string dataPregaoFormatada = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.FormatarData(request.DataPregao.Value, "-");

                DbParameter parametro_P_sDtPregao = dbCommand.CreateParameter();
                parametro_P_sDtPregao.ParameterName = "P_sDtPregao";
                parametro_P_sDtPregao.Direction = ParameterDirection.Input;
                parametro_P_sDtPregao.DbType = DbType.AnsiString;
                parametro_P_sDtPregao.Value = dataPregaoFormatada;
                dbCommand.Parameters.Add(parametro_P_sDtPregao);




                #region Parametros de Erro


                DbParameter parametroR_nErro = dbCommand.CreateParameter();
                parametroR_nErro.ParameterName = "R_nErro";
                parametroR_nErro.Direction = ParameterDirection.Output;
                parametroR_nErro.DbType = DbType.Int32;
                parametroR_nErro.Value = 0;

                dbCommand.Parameters.Add(parametroR_nErro);

                DbParameter parametroR_sErro = dbCommand.CreateParameter();
                parametroR_sErro.ParameterName = "R_sErro";
                parametroR_sErro.Direction = ParameterDirection.Output;
                parametroR_sErro.DbType = DbType.String;
                parametroR_sErro.Size = 4000;
                parametroR_sErro.Value = null;

                dbCommand.Parameters.Add(parametroR_sErro);

                DbParameter parametroR_sArgs = dbCommand.CreateParameter();
                parametroR_sArgs.ParameterName = "R_sArgs";
                parametroR_sArgs.Direction = ParameterDirection.Output;
                parametroR_sArgs.DbType = DbType.String;
                parametroR_sArgs.Size = 4000;
                parametroR_sArgs.Value = null;

                dbCommand.Parameters.Add(parametroR_sArgs);

                DbParameter parametrorettype = dbCommand.CreateParameter();
                parametrorettype.ParameterName = "R_Retorno";
                parametrorettype.Direction = ParameterDirection.Output;
                parametrorettype.DbType = DbType.Int32;
                parametrorettype.Value = 0;


                dbCommand.Parameters.Add(parametrorettype);

                #endregion


                #endregion

                #region Execução

                this.DataBase.ExecuteNonQuery(dbCommand);

                if (!Convert.ToBoolean(this.DataBase.GetParameterValue(dbCommand, "R_Retorno")))
                {
                    resultado.Sucesso = false;
                    resultado.CodigoErro = Convert.ToInt32(parametroR_nErro.Value);
                    resultado.Argumentos = Convert.ToString(parametroR_sArgs.Value);
                }
                else
                    resultado.Sucesso = true;

                #endregion
            }

            return resultado;


            
        }

        /// Data:12/02/2008 18:02
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// Metodo responsavel por recuperar o Tipo do Negocio do Comitente
        public string ExecutarBuscaTipoGrav(BusinessEntity.Negocio request)
        {
            OracleDataBase dbAcesso = this.DataBase;
            
            //deverá ser exucutado um novo comando antes da chamada da função
            DbCommand execucaoAnterior;
            StringBuilder sql_execucao_anterior = new StringBuilder();

            DbCommand dbCommand;
            DbParameter parameter;
            StringBuilder sql = new StringBuilder();


            //chamada da anterior
            sql_execucao_anterior.Append("declare rettype boolean;");
            sql_execucao_anterior.Append("BEGIN ");
            sql_execucao_anterior.Append("rettype:= pOr_Trata_Rcpa.fOr_E_Neg_Rcpa( :sDataPreg, :sCodNeg, :nNumNeg, :sNatOpe, :CdCliente, :L_nQtRcpa ); ");
            sql_execucao_anterior.Append("if(rettype) then ");
            sql_execucao_anterior.Append(":RET:=1; ");
            sql_execucao_anterior.Append("else ");
            sql_execucao_anterior.Append(":RET:=0; ");
            sql_execucao_anterior.Append("end if; ");
            sql_execucao_anterior.Append("END; ");

            execucaoAnterior = dbAcesso.GetSqlStringCommand(sql_execucao_anterior.ToString());

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "sDataPreg";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.String;
            parameter.Value = request.DataPregao.Value.ToString("dd/MM/yyyy");
            execucaoAnterior.Parameters.Add(parameter);

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "sCodNeg";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.String;
            parameter.Value = request.Titulo.Codigo.ToString();
            execucaoAnterior.Parameters.Add(parameter);

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "nNumNeg";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.Int32;
            parameter.Value = request.NumeroNegocio.Value;
            execucaoAnterior.Parameters.Add(parameter);

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "sNatOpe";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.String;
            parameter.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao));
            execucaoAnterior.Parameters.Add(parameter);

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "CdCliente";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.Int32;
            parameter.Value = request.CodigoCliente.Value;
            execucaoAnterior.Parameters.Add(parameter);

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "L_nQtRcpa";
            parameter.Direction = ParameterDirection.Output;
            parameter.DbType = DbType.Int32;
            parameter.Value = null;
            execucaoAnterior.Parameters.Add(parameter);

            parameter = execucaoAnterior.CreateParameter();
            parameter.ParameterName = "RET";
            parameter.Direction = ParameterDirection.ReturnValue;
            parameter.DbType = DbType.Int32 ;
            parameter.Value = null;
            execucaoAnterior.Parameters.Add(parameter);


            dbAcesso.ExecuteNonQuery(execucaoAnterior);

            //procedure criada para verificação se é recompra
            bool verificacaoRecompra = (Convert.ToInt32(parameter.Value) == 1) ? true : false;

            //tratamento da variável de recompra
            string valorRecompra = "N";
            if (verificacaoRecompra)
                valorRecompra = "S";


            //procedure alterada para adição de mais um parametro
            sql.Append("BEGIN ");
            sql.Append(":RET:= PR_CALFIN3.FOR_BUSCATIPOGRAV(:P_nIdLiquid,:P_sCdCodisi,:P_nCdCliente,:L_sENegRcpa,:R_sInCpmfAtiv,:R_sInCpmfCli); ");
            sql.Append("END; ");

            dbCommand = dbAcesso.GetSqlStringCommand(sql.ToString());

            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "P_nIdLiquid";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.Int32;
            parameter.Value = request.DiasLiquidacao.Value;
            dbCommand.Parameters.Add(parameter);

            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "P_sCdCodisi";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.AnsiString;
            parameter.Value = Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.CodigoISIN);
            dbCommand.Parameters.Add(parameter);

            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "P_nCdCliente";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.Int32;
            parameter.Value = request.Correspondente.Codigo;
            dbCommand.Parameters.Add(parameter);

            //parametro adicionado para nova assinatura da procedure no banco de dados
            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "L_sENegRcpa";
            parameter.Direction = ParameterDirection.Input;
            parameter.DbType = DbType.AnsiString;
            parameter.Value = valorRecompra;
            dbCommand.Parameters.Add(parameter);

            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "R_sInCpmfAtiv";
            parameter.Direction = ParameterDirection.Output;
            parameter.DbType = DbType.AnsiString;
            parameter.Value = null;
            parameter.Size = 4;
            dbCommand.Parameters.Add(parameter);

            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "R_sInCpmfCli";
            parameter.Direction = ParameterDirection.Output;
            parameter.DbType = DbType.AnsiString;
            parameter.Value = null;
            parameter.Size = 4;
            dbCommand.Parameters.Add(parameter);

            parameter = dbCommand.CreateParameter();
            parameter.ParameterName = "RET";
            parameter.Direction = ParameterDirection.ReturnValue;
            parameter.DbType = DbType.AnsiString;
            parameter.Value = null;
            parameter.Size = 6;
            dbCommand.Parameters.Add(parameter);

            dbAcesso.ExecuteNonQuery(dbCommand);

            return Convert.ToString(parameter.Value);
        }

        /// <summary>
        /// Data:16/02/2008 17:05
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// Metodo responsavel por recuperar um negocio filtrando pelo chave de negocio
        /// NR_NEGOCIO, CD_NEGOCIO, CD_NATOPE, DT_PREGAO, CD_BOLSAMOV
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public BusinessEntity.Negocio ConsultarNegocio(BusinessEntity.Negocio request)
        {
            OracleDataBase db = this.DataBase;
            DbCommand dbCommand;
            IDataReader reader;
            BusinessEntity.Negocio response = null; ;
            StringBuilder sql = new StringBuilder();

            sql.Append(" SELECT ");
            sql.Append(" DT_PREGAO, HH_NEGOCIO, CD_BOLSAMOV, ");
            sql.Append(" CD_CORRESP, PC_COMISSAO_CORRESP, NR_NEGOCIO, ");
            sql.Append(" DV_NEGOCIO, CD_NATOPE, TP_MERCADO, ");
            sql.Append(" CD_NEGOCIO, CD_ESPECIF, NM_NOMRES, ");
            sql.Append(" QT_NEGOCIO, QT_ESPECIFICADA, VL_NEGOCIO, ");
            sql.Append(" TP_TERMO, TP_ORIGEM, CD_CONTRAPARTE, ");
            sql.Append(" DS_OBS, FT_VALORIZACAO, DT_OPCOES, ");
            sql.Append(" TP_GERAOFERTA, QT_CASADA, TP_VCOTER, ");
            sql.Append(" IN_ORINEG, TP_LIQUID, CD_TITOBJ, ");
            sql.Append(" CD_CODISI, CD_CODCAS, CD_CLIENTE, ");
            sql.Append(" IN_AFTERM, ID_LIQUID, NR_OFCPMEGA, ");
            sql.Append(" NR_OFVDMEGA, NR_OFEMEGA, CD_OPERA_MEGA, ");
            sql.Append(" FT_LIQNOT, ID_TPLIQ, IN_BROKERAGEM, ");
            sql.Append(" DT_MOVIMENTO ");
            sql.Append(" FROM TORNEGD ");
            sql.Append(" WHERE ");
            sql.Append(" NR_NEGOCIO = :NR_NEGOCIO ");
            sql.Append(" AND CD_NEGOCIO = :CD_NEGOCIO ");
            sql.Append(" AND CD_NATOPE  = :CD_NATOPE ");
            sql.Append(" AND DT_PREGAO  = :DT_PREGAO ");
            sql.Append(" AND CD_BOLSAMOV = :CD_BOLSAMOV ");

            dbCommand = db.GetSqlStringCommand(sql.ToString());

            db.AddInParameter(dbCommand, "NR_NEGOCIO", DbType.Int32, request.NumeroNegocio);
            db.AddInParameter(dbCommand, "CD_NEGOCIO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo));
            db.AddInParameter(dbCommand, "CD_NATOPE", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao)));
            db.AddInParameter(dbCommand, "DT_PREGAO", DbType.DateTime, request.DataPregao);
            db.AddInParameter(dbCommand, "CD_BOLSAMOV", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa));

            reader = db.ExecuteReader(dbCommand);

            if (reader.Read())
            {
                response = new BusinessEntity.Negocio();

                response.DataPregao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader.GetValue(0));
                
                response.HoraNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader.GetValue(1));

                if (response.DataPregao.HasValue && response.HoraNegocio.HasValue)
                    response.HoraNegocio = new DateTime(response.DataPregao.Value.Year, response.DataPregao.Value.Month, response.DataPregao.Value.Day,
                                                        response.HoraNegocio.Value.Hour, response.HoraNegocio.Value.Minute, 0);
                else
                    response.HoraNegocio = null;

                response.Bolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(2));

                if (response.Correspondente == null)
                    response.Correspondente = new Sinacor.Servico.Bovespa.Cliente.BusinessEntity.Correspondente();

                response.Correspondente.Codigo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(3));
                response.Correspondente.PercentualComissao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(4));
                response.NumeroNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(5));
                response.DigitoNegocio = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(6));
                response.TipoNaturezaOperacao =
                    Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoNaturezaOperacao>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(7)));

                response.TipoMercado = Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoMercado>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(8)));

                if (response.Titulo == null)
                    response.Titulo = new Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Titulo();

                response.Titulo.Codigo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(9));
                response.Especificacao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(10));
                response.NomeSA = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(11));

                response.Titulo.NomeSA = response.NomeSA;
                response.Titulo.Especificacao = response.Especificacao;
                response.Titulo.Descricao = response.Titulo.NomeSA + " " + response.Titulo.Especificacao;

                response.Quantidade = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(12));
                response.QuantidadeEspecificada = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(13));
                response.Preco = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(14));

                if(reader.GetValue(15) != null && reader.GetValue(15) != DBNull.Value)
                    response.TipoTermo = Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoTermo>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(15)));

                if (reader.GetValue(16) != null && reader.GetValue(16) != DBNull.Value)
                    response.TipoOrigem = Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoOrigemNegocio>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(16)));

                response.ContraParte = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(17));
                response.Observacao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(18));
                response.FatorValorizacao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(19));

                response.VencimentoOpcoesTermo =
                    Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader.GetValue(20));

                response.PontaGeradoraOferta = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(21)) == "S";
                response.QuantidadeCasada = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDecimal(reader.GetValue(22));
                response.PrazoTermo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(23));

                if (reader.GetValue(24) != null && reader.GetValue(24) != DBNull.Value)
                    response.TipoIndicadorOrigem =
                        Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoIndicadorOrigemNegocio>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(24)));

                //tentar recuperar TP_LIQUID
                try
                {
                    //20080419 13:04 - Alterado para atender ao chamado 3326 - DMilanez.7Comm
                    string tpLiquid;
                    tpLiquid = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["TP_LIQUID"]);

                    //20080424 16:58 - Alterado pois, segundo analista sinacor, pois nulo do ponto de vista do negocio nao e um valor valido para o campo - DMilanez.7Comm
                    if (tpLiquid == "NOC" || tpLiquid == "NOV")// || string.IsNullOrEmpty(tpLiquid))
                        tpLiquid = "NOR";
                    
                    response.TipoEstrategia =
                        Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoEstrategia>(tpLiquid);
                }
                catch
                {
                    try
                    {
                        if (!response.TipoEstrategia.HasValue)
                            Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoOfertaBovespaFix>(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader["TP_LIQUID"]));
                    }
                    catch
                    {
                        response.TipoEstrategia = null;
                        response.TipoOfertaBovespaFix = null;
                    }
                }

                response.TituloObjeto = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(26));
                response.Titulo.CodigoISIN = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(27));
                response.CodigoCasamento = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(28));
                response.CodigoCliente = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(29));
                response.NegociadoAfterMarket = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(30)) == "S";
                response.DiasLiquidacao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(31));
                response.NumeroOfertaCompraMegaBolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(32));
                response.NumeroOfertaVendaMegaBolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(33));
                response.NumeroOfertaMegaBolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(34));
                response.CodigoOperadorMegaBolsa = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(35));
                response.NaoLiquidaNota = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(36), true) == 0;


                if (reader.GetValue(37) != null && reader.GetValue(37) != DBNull.Value)
                    response.TipoLiquidacaoNegocio =
                        Sinacor.Infra.Service.Common.EnumConverter.Parse<BusinessEntity.Enum.TipoLiquidacaoNegocio>(Convert.ToString(Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(reader.GetValue(37), true)));

                response.IndicadorBrokeragem = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(reader.GetValue(38));
                response.DataMovimento = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorDateTime(reader.GetValue(39));
            }
            reader.Close();

            return response;
        }

        public bool VerificarExistenciaNegocio(BusinessEntity.Negocio request)
        {
            OracleDataBase db = this.DataBase;
            DbCommand dbCommand;
            object ret;
            StringBuilder sql = new StringBuilder();

            sql.Append(" SELECT 1");
            sql.Append(" FROM TORNEGD ");
            sql.Append(" WHERE ");
            sql.Append(" NR_NEGOCIO = :NR_NEGOCIO ");
            sql.Append(" AND CD_NEGOCIO = :CD_NEGOCIO ");
            sql.Append(" AND CD_NATOPE  = :CD_NATOPE ");
            sql.Append(" AND DT_PREGAO  = :DT_PREGAO ");
            sql.Append(" AND CD_BOLSAMOV = :CD_BOLSAMOV ");

            dbCommand = db.GetSqlStringCommand(sql.ToString());

            db.AddInParameter(dbCommand, "NR_NEGOCIO", DbType.Int32, request.NumeroNegocio);
            db.AddInParameter(dbCommand, "CD_NEGOCIO", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Titulo.Codigo));
            db.AddInParameter(dbCommand, "CD_NATOPE", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(Sinacor.Infra.Service.Common.EnumConverter.ToString<BusinessEntity.Enum.TipoNaturezaOperacao?>(request.TipoNaturezaOperacao)));
            db.AddInParameter(dbCommand, "DT_PREGAO", DbType.DateTime, request.DataPregao);
            db.AddInParameter(dbCommand, "CD_BOLSAMOV", DbType.AnsiString, Sinacor.Servico.Bovespa.BovespaBase.Util.Funcoes.ToUpper(request.Bolsa));

            ret = db.ExecuteScalar(dbCommand);

            if (ret != null && Convert.ToInt32(ret) == 1)
                return true;
            else
                return false;
        }

        public List<BusinessEntity.Negocio> ConsultarNegocioOrdemDigitacao(
                  Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Parameter.ConsultarNegocioOrdemDigitacaoRequest pConsultarNegocioOrdemDigitacao
              )
        {
            List <BusinessEntity.Negocio> response = null;

            String sql = @"
                select  sum( qt_negocio ) Quantidade, 
                vl_negocio Preco 
                from    torexec 
                where   dt_datord = :DataOrdem 
                and nr_seqord  = :NumeroOrdem 
                and nr_subseq  = :NumeroOrdemSubSequencia 
                and dt_negocio = :DataPregao 
                group by vl_negocio
            ";

            using (DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql))
            {
                this.DataBase.AddInParameter(dbCommand, "DataOrdem", DbType.DateTime, pConsultarNegocioOrdemDigitacao.DataOrdem);
                this.DataBase.AddInParameter(dbCommand, "NumeroOrdem", DbType.Int64, pConsultarNegocioOrdemDigitacao.NumeroOrdem);
                this.DataBase.AddInParameter(dbCommand, "NumeroOrdemSubSequencia", DbType.Int64, pConsultarNegocioOrdemDigitacao.NumeroOrdemSubSequencia);
                this.DataBase.AddInParameter(dbCommand, "DataPregao", DbType.DateTime, pConsultarNegocioOrdemDigitacao.DataPregao);

                response = this.FindAll<BusinessEntity.Negocio>(dbCommand, new ConstructEntity<BusinessEntity.Negocio>(ConstructNegocio));
            }

            return response;
        }

        public List<BusinessEntity.Negocio> ConsultarNegocioListaLoteDigitacao(List<BusinessEntity.Parameter.ConsultarNegocioLoteDigitacao> pConsultarNegocioLoteDigitacao)
        {
            List<BusinessEntity.Negocio> response = null;
            
            List<BusinessEntity.Negocio> responseLista = new List<BusinessEntity.Negocio>();

            String sql = @"
                select  sum( a.qt_negocio ) Quantidade,
                        a.vl_negocio Preco
                from    torexec a,
                        tordisconj b
                where a.dt_negocio  = :DataPregao
                        and b.dt_pregao   = a.dt_negocio
                        and b.nr_conjunto = :NumeroConjunto
                        and b.dt_datord   = a.dt_datord
                        and b.nr_seqord   = a.nr_seqord
                        and b.nr_subseq   = a.nr_subseq 
                group by vl_negocio";

            foreach (BusinessEntity.Parameter.ConsultarNegocioLoteDigitacao pitem in pConsultarNegocioLoteDigitacao)
            {



                using (DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql))
                {
                    this.DataBase.AddInParameter(dbCommand, "NumeroConjunto", DbType.Int64, pitem.NumeroConjunto);
                    this.DataBase.AddInParameter(dbCommand, "DataPregao", DbType.DateTime, pitem.DataPregao);
                    response = this.FindAll<BusinessEntity.Negocio>(dbCommand, new ConstructEntity<BusinessEntity.Negocio>(ConstructNegocio));
                }

                if(response != null)
                    responseLista.AddRange(response);
            }

            return responseLista;
        }
        
        public List<BusinessEntity.Negocio> ConsultarNegocioLoteDigitacao(BusinessEntity.Parameter.ConsultarNegocioLoteDigitacao pConsultarNegocioLoteDigitacao)
        {
            List<BusinessEntity.Negocio> response = null;

            String sql = @"
                select  sum( a.qt_negocio ) Quantidade,
                        a.vl_negocio Preco
                from    torexec a,
                        tordisconj b
                where a.dt_negocio  = :DataPregao
                        and b.dt_pregao   = a.dt_negocio
                        and b.nr_conjunto = :NumeroConjunto
                        and b.dt_datord   = a.dt_datord
                        and b.nr_seqord   = a.nr_seqord
                        and b.nr_subseq   = a.nr_subseq 
                group by vl_negocio";

            using (DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql))
            {
                this.DataBase.AddInParameter(dbCommand, "NumeroConjunto", DbType.Int64, pConsultarNegocioLoteDigitacao.NumeroConjunto);
                this.DataBase.AddInParameter(dbCommand, "DataPregao", DbType.DateTime, pConsultarNegocioLoteDigitacao.DataPregao);
                response = this.FindAll<BusinessEntity.Negocio>(dbCommand, new ConstructEntity<BusinessEntity.Negocio>(ConstructNegocio));
            }

            return response;
        }
        
        #region ConsultarNegocioExecutado
        public List<BusinessEntity.NegocioExecutado> ConsultarNegocioExecutado(BusinessEntity.Parameter.ConsultarNegocioExecutado pConsultarNegocioExecutado){
            List<BusinessEntity.NegocioExecutado> response = null;

            String sql = " " +
                "SELECT  TOREXEC.DT_HOREXE \"DataHoraExecutado\", "+
                        "TOREXEC.DT_DATORD \"DataOrdem\", "+
                        "TOREXEC.NR_SEQORD \"NumeroOrdem\", "+
                        "TOREXEC.NR_SUBSEQ \"NumeroOrdemSubSequencia\", "+
                        "TOREXEC.DT_NEGOCIO \"DataNegocio\", "+
                        "TOREXEC.NR_NEGOCIO \"NumeroNegocio\", "+
                        "TOREXEC.CD_NATOPE \"NaturezaOpcao\", "+
                        "TOREXEC.VL_NEGOCIO \"ValorNegocio\", "+
                        "TOREXEC.QT_NEGOCIO \"QuantidadeNegocio\", "+
                        "TOREXEC.TP_ORIGEM \"OrigemNegocio\", "+
                        "TOREXEC.NM_RESUSUA \"NomeResUsuario\", "+
                        "TOREXEC.DT_DATMOV \"DataMovimento\", "+
                        "TOREXEC.NR_SEQDET \"NumeroSequenciaDET\", "+
                        "TOREXEC.CD_BOLSAMOV \"CodigoBolsaMovimento\", "+
                        "TOREXEC.CD_NEGOCIO \"CodigoNegocio\", "+
                        "TOREXEC.DT_SISTEMA \"DataSistema\" "+
                "FROM    TOREXEC "+
                "WHERE   TOREXEC.DT_DATORD=:DataOrdem "+
                        "AND TOREXEC.NR_SEQORD=:NumeroOrdem "+
                        "AND TOREXEC.NR_SUBSEQ=:NumeroOrdemSubSequencia "+
                "ORDER BY TOREXEC.DT_NEGOCIO ASC";

            using (DbCommand dbCommand = this.DataBase.GetSqlStringCommand(sql))
            {
                this.DataBase.AddInParameter(dbCommand, "DataOrdem", DbType.DateTime, pConsultarNegocioExecutado.DataOrdem);
                this.DataBase.AddInParameter(dbCommand, "NumeroOrdem", DbType.Int32, pConsultarNegocioExecutado.NumeroOrdem);
                this.DataBase.AddInParameter(dbCommand, "NumeroOrdemSubSequencia", DbType.Int32, pConsultarNegocioExecutado.NumeroOrdemSubSequencia);
                response = this.FindAll<BusinessEntity.NegocioExecutado>(dbCommand, new ConstructEntity<BusinessEntity.NegocioExecutado>(ConstructNegocioExecutado));
            }

            return response;
        }
        
        protected BusinessEntity.NegocioExecutado ConstructNegocioExecutado(IDataReader reader)
        {
            BusinessEntity.NegocioExecutado objNegocioExecutado = new Sinacor.Servico.Bovespa.Ordens.BusinessEntity.NegocioExecutado();
            
            objNegocioExecutado.CodigoBolsaMovimento = reader.GetValue<string>("CodigoBolsaMovimento");
            objNegocioExecutado.CodigoNegocio = reader.GetValue<string>("CodigoNegocio");
            objNegocioExecutado.DataHoraExecutado = reader.GetValue<DateTime>("DataHoraExecutado");
            objNegocioExecutado.DataMovimento = reader.GetValue<DateTime>("DataMovimento");
            objNegocioExecutado.DataNegocio = reader.GetValue<DateTime>("DataNegocio");
            objNegocioExecutado.DataOrdem = reader.GetValue<DateTime>("DataOrdem");
            objNegocioExecutado.DataSistema = reader.GetValue<DateTime>("DataSistema");
            objNegocioExecutado.NaturezaOperacao = reader.GetValue<string>("NaturezaOperacao").ToUpper() == "C" ? Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao.Compra : Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoNaturezaOperacao.Venda;
            objNegocioExecutado.NomeResUsuario = reader.GetValue<string>("NomeResUsuario");
            objNegocioExecutado.NumeroNegocio = reader.GetValue<int>("NumeroNegocio");
            objNegocioExecutado.NumeroOrdem = reader.GetValue<int>("NumeroOrdem");
            objNegocioExecutado.NumeroOrdemSubSequencia = reader.GetValue<int>("NumeroOrdemSubSequencia");
            objNegocioExecutado.NumeroSequenciaDET = reader.GetValue<int>("NumeroSequenciaDET");
            //objNegocioExecutado.OrigemNegocio = Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoOrigemNegocio
            objNegocioExecutado.QuantidadeNegocio = reader.GetValue<int>("QuantidadeNegocio");
            objNegocioExecutado.ValorNegocio = reader.GetValue<decimal>("ValorNegocio");
            
            return objNegocioExecutado;
        }
        #endregion ConsultarNegocioExecutado
      

        #region FindAll / FindOne
        protected BusinessEntity.Negocio ConstructNegocio(IDataReader reader)
        {
            BusinessEntity.Negocio entity = new BusinessEntity.Negocio();
            entity.Quantidade = reader.GetValue<Decimal>("Quantidade");
            entity.Preco = reader.GetValue<Decimal?>("Preco");
            return entity;
        }
        #endregion FindAll / FindOne

        #region DBOperations
        private static bool DBReturnBool(object fromDataBase)
        {
            if (fromDataBase != DBNull.Value)
            {
                switch (fromDataBase.ToString().ToUpper())
                {
                    case "1": { return true; break; }
                    case "S": { return true; break; }
                    case "Y": { return true; break; }
                    default: { return false; break; }
                }
            }
            else
                return false;
        }

        private static DateTime? DBReturnDtTimeNull(object fromDataBase)
        {
            return (fromDataBase != DBNull.Value) ? Convert.ToDateTime(fromDataBase) : DateTime.MinValue;
        }

        private static string DBReturnStr(object fromDataBase)
        {
            return (fromDataBase != DBNull.Value) ? Convert.ToString(fromDataBase) : " ";
        }

        private static int DBReturnInt(object fromDataBase)
        {
            return (fromDataBase != DBNull.Value) ? Convert.ToInt32(fromDataBase) : 0;
        }

        private decimal DBReturnDec(object fromDataBase)
        {
            return (fromDataBase != DBNull.Value) ? Convert.ToDecimal(fromDataBase) : 0;
        }

        #endregion
    }
}
